2

我有一个带有几个按钮的视图,用于呈现 UIImagePickerControllers(相机和媒体选择器)。当我创建 UIImagePickerControllers 时,我给它们起不同的名称并以模态方式呈现它们,如下面的代码所示:

- (void) startMediaBrowserFromViewControllerForBGImage {
    UIImagePickerController * mediaUIForBGImage = [[UIImagePickerController alloc]init];
    //i also set a bunch of different settings here, but it doesn't matter for this purpose
    mediaUIForBGImage.delegate = self;
    [self presentModalViewController: mediaUIForBGImage animated:YES];
}

现在您也可以在代码中看到,我将委托设置为self,这就是我对所有 UIImagePickerController 所做的事情,但问题是 - 在委托方法中,我如何知道哪个 UIImagePickerController 调用了委托方法。因为对于每个 UIImagePickerControllers,我需要对媒体执行的操作都不同。在委托方法中,我确实获得了UIImagePickerController参数,但它始终具有从方法(选择器)分配的名称。我可以用什么来知道要引用哪个 UIImagePickerController?

4

3 回答 3

2

您的一个解决方案可能是这样的:

如果您设置tag各种选择器的“”值,则发送给委托方法的参数之一将包括导致委托方法触发的选择器,如果您查看tag它的“”值,您将知道哪个选择器。

另一种解决方案可能是将每个选择器设置为一个 ivar 或一个属性,然后比较发送到委托方法的选择器参数以查看哪个等于哪个 ivar 或属性(即对象地址是否相同?)。

于 2012-09-08T07:37:32.773 回答
2

我认为您可以存储对每个选择器的引用,然后检查它是否是同一个实例。虽然我会质疑使用多个不同的选择器实例,但你可以只配置一个吗?此外,它们在任何配置中返回几乎相同的结果,您可以调查结果字典以满足特定需求。

self.oneImagePicker = [UIImagePickerController ...]
self.twoImagePicker = [UIImagePickerController ...]

//In delegate
if ([self.oneImagePicker isEqual:picker]) ...
于 2012-09-08T07:40:47.610 回答
0

您可以在委托中锻炼您正在处理的选择器 - 例如检查标签属性 - 或创建一个 UIPopoverController 子类来驱动您的弹出框并使其成为 ImagePicker 的委托。它将需要将选定的信息传递回主类 - 您可以通过实现 popoverControllerShouldDismissPopover 委托方法并检查子类的属性来做到这一点

于 2014-08-11T11:48:52.777 回答