Ios 根据激活UIImagePickerController的按钮执行不同的功能

Ios 根据激活UIImagePickerController的按钮执行不同的功能,ios,objective-c,uiimagepickercontroller,Ios,Objective C,Uiimagepickercontroller,我有两个按钮,当按下每个按钮时,将出现一个UIImagePickerController 我可以很好地选择和检索照片。但是,我想根据启动操作的按钮做一些不同的事情 有没有办法确定是哪个按钮导致初始的UIImagePickerController出现在didFinishPickingImage调用中?没有魔法。您需要以某种方式保存您的状态,并且在调用委托方法时,确定您的状态并相应地采取行动。这里最简单的方法是向控制器添加一个属性或实例变量,并为每个按钮更新一个唯一的值(如enum)。没有神奇之处。

我有两个按钮,当按下每个按钮时,将出现一个
UIImagePickerController

我可以很好地选择和检索照片。但是,我想根据启动操作的按钮做一些不同的事情


有没有办法确定是哪个按钮导致初始的
UIImagePickerController
出现在
didFinishPickingImage
调用中?

没有魔法。您需要以某种方式保存您的状态,并且在调用委托方法时,确定您的状态并相应地采取行动。这里最简单的方法是向控制器添加一个属性或实例变量,并为每个按钮更新一个唯一的值(如enum)。

没有神奇之处。您需要以某种方式保存您的状态,并且在调用委托方法时,确定您的状态并相应地采取行动。这里最简单的方法是向控制器添加属性或实例变量,并使用唯一值(如enum)更新它对于每个按钮。

您可以为两个按钮分配标记属性,然后在创建UIImagePickerController实例时,您可以将触摸到的按钮的按钮标记属性分配给UIImagePickerController实例的picker.view.tag属性

然后,在UIImagePickerController的代理回调中,您可以检查选择器的view.tag属性,以确定在创建UIImagePickerController时触摸了哪个按钮

mybutton.tag = 100;
[myButton addTarget:self action:@selector(displayTheUIImagePickerController:)     forControlEvents:UIControlEventTouchUpInside];



-(void)displayTheUIImagePickerController:(id)sender
{
    NSInteger buttonTag = [sender tag];

    UIImagePickerController *picker = [[UIImagePickerController alloc] init];
    picker.view.tag = buttonTag;

//Finish setting up picker controller and then present
}



- (void)imagePickerController: (UIImagePickerController *)picker
    didFinishPickingImage: (UIImage *)i
              editingInfo: (NSDictionary *)editingInfo {

    NSInteger buttonTag = picker.view.tag;


    switch (buttonTag) {
        case 100:
            //Do something for button with tag 100
            break;

        case 101:
            //Do something for button with tag 101
            break;

        default:
            break;
    }

}

您可以为这两个按钮指定标记属性,然后在创建UIImagePickerController实例时,可以将触摸到的按钮的按钮标记属性指定给UIImagePickerController实例的picker.view.tag属性

然后,在UIImagePickerController的代理回调中,您可以检查选择器的view.tag属性,以确定在创建UIImagePickerController时触摸了哪个按钮

mybutton.tag = 100;
[myButton addTarget:self action:@selector(displayTheUIImagePickerController:)     forControlEvents:UIControlEventTouchUpInside];



-(void)displayTheUIImagePickerController:(id)sender
{
    NSInteger buttonTag = [sender tag];

    UIImagePickerController *picker = [[UIImagePickerController alloc] init];
    picker.view.tag = buttonTag;

//Finish setting up picker controller and then present
}



- (void)imagePickerController: (UIImagePickerController *)picker
    didFinishPickingImage: (UIImage *)i
              editingInfo: (NSDictionary *)editingInfo {

    NSInteger buttonTag = picker.view.tag;


    switch (buttonTag) {
        case 100:
            //Do something for button with tag 100
            break;

        case 101:
            //Do something for button with tag 101
            break;

        default:
            break;
    }

}

这听起来像是滥用标签系统。有更优雅的方法来实现这一点。这听起来像是滥用标签系统。有更优雅的方法来实现这一点。