1

以下を実装するためのコンセンサス設計パターンを知りたいです。

ユーザーがさまざまなタスクを実行できるようにする2つのボタンを備えたメインビューがあり、どちらもを使用して画像を選択する必要があります(タスク1 =「タイプの写真を選択/撮影」およびタスク2 =「UIImagePickerControllerタイプの写真を選択/撮影」としましょう」)。現在、UIIPC を提示するビュー コントローラーにプロトコルを実装していますが、デリゲート メソッドに対して 2 つの異なる応答が必要な場合:foobar<UIImagePickerControllerDelegate>

     - (void) imagePickerController: (UIImagePickerController *) pickerdidFinishPickingMediaWithInfo: (NSDictionary *) info

ユーザーが写真を選択したかどうかに応じてfoo、 2 つの異なるデリゲート メソッドbarを実装する最善の方法に興味があります。<UIImagePickerController>表示側のビュー コントローラーに含まれ、2 回インスタンス化されたスタンドアロンのデリゲート オブジェクトが最適でしょうか? (私は iOS を使い始めてまだ 2 週間しか経っていないので、まだデザイン パターンを取り入れています)。

4

2 に答える 2

2

pickerヘッダーのプロパティとしてピッカーを作成するとyourPicker、デリゲートメソッドとの間で比較を行うことができます。

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
于 2012-07-10T17:50:33.153 に答える
0

2 つの異なるデリゲートを宣言します。最善の方法は、同じデリゲートを 2 回インスタンス化しないことです。これは、コードで奇妙なジュジュが発生することになるためです。

UIImagePickerController.h に次のように記述します。

    #pragma mark - Protocols advance declarations 
    @protocol imageTypeADelegate
    @required
      -(void) takeImageOfTypeA:(id)object;
    @end

    #pragma mark - Protocols advance declarations 
    @protocol imageTypeBDelegate
    @required
       -(void) takeImageOfTypeB:(id)object;
    @end

それらをプロパティ宣言に追加します

    #pragma mark - Property declarations 
    @property (assign) id <imageTypeADelegate> typeADelegate;
    @property (assign) id <imageTypeADelegate> typeBDelegate;

次に、.m ファイルに以下を追加します。

    #pragma mark - Protocols
    -(void) pressedButtonToTakeImageOfTypeA:(id)sender;
    {
       [[self _typeADelegate] takeImageOfTypeA:(id)object];
    }
    -(void) pressedButtonToTakeImageOfTypeB:(id)sender;
    {
       [[self _typeBDelegate] takeImageOfTypeB:(id)object];
    }

次に、ルーチンを実行するために必要なクラスで、通知したい.hにこれを追加するだけです

    #import "UIImagePickerController.h"
    @interface OtherViewController : UIViewController <imageTypeADelegate, imageTypeBDelegate>

そしてあなたの.mのどこかに

-(void) takeImageOfTypeA:(id)object;
{ 
   // Do something
}

-(void) takeImageOfTypeA:(id)object;
{
   // Do something
} 

/~行末

于 2012-07-10T18:07:48.580 に答える