1

我很想知道实现以下内容的共识设计模式:

我有一个带有 2 个按钮的主视图,允许用户执行不同的任务,两者都需要使用 a 选择图像UIImagePickerController(假设任务 1 =“选择/拍摄类型的照片foo”和任务 2 =“选择/拍摄类型的照片bar”)。目前,我正在<UIImagePickerControllerDelegate>呈现 UIIPC 的视图控制器中实现协议,但是鉴于我需要对委托方法有 2 个不同的响应:

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

取决于用户是选择 afoo还是barphoto 我对实现 2 种不同<UIImagePickerController>委托方法的最佳方式感兴趣。包含在呈现视图控制器中并实例化两次的独立委托对象是否效果最好?(我在 iOS 上只有几周的时间,所以还在接受设计模式)。

4

2 回答 2

2

如果您将选取器创建为标头中的属性,则可以在委托方法之间picker进行比较yourPicker

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

声明两个不同的代表。最好的方法,永远不要实例化同一个委托两次,因为它最终会在你的代码中发生奇怪的 juju。

在你的 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 回答