我有一个带有几个按钮的视图,我用它来呈现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
,这就是我对所有UIImagePickerControllers所做的,但问题是 - 在委托方法中,我怎么知道UIImagePickerController调用了委托方法。因为我需要对媒体采取的操作对于每个UIImagePickerControllers都是不同的。在委托方法中,我确实获得了UIImagePickerController
参数,但它始终具有从方法(选择器)分配的名称。我可以用什么来知道要引用哪个UIImagePickerController?
答案 0 :(得分:2)
您可以选择一种解决方案:
如果您设置" tag
"您的各种选择器的值,发送给委托方法的参数之一将包括导致委托方法触发的选择器,以及如果您查看" tag
"它的价值,你知道它是哪个选择器。
另一种解决方案可能是将每个选择器设置为ivar或属性,然后将发送的picker参数与委托方法进行比较,以查看哪一个等于哪个ivar或属性(即对象的地址相同?)。
答案 1 :(得分:2)
我认为您可以存储对每个选择器的引用,然后检查它是否是同一个实例。虽然我会质疑使用多个不同的选择器实例,你能配置一个吗?此外,它们在任何配置中都返回相同的结果,您可以根据特定需求调查结果字典。
self.oneImagePicker = [UIImagePickerController ...]
self.twoImagePicker = [UIImagePickerController ...]
//In delegate
if ([self.oneImagePicker isEqual:picker]) ...
答案 2 :(得分:0)
你可以锻炼你在委托中处理哪个选择器 - 例如检查标签属性 - 或者创建一个UIPopoverController子类来驱动你的popover并使其成为ImagePicker的委托。它需要将选定的信息传递回主类 - 您可以通过实现popoverControllerShouldDismissPopover委托方法并检查子类的属性来实现此目的