Определение различных сборщиков в делегате UIImagePickerController

У меня есть представление с парой кнопок, которые я использую для представления 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 вызвал метод делегата. Поскольку действия, которые мне нужно выполнить с носителем, различны для каждого UIImagePickerController. В методе делегата я получаю параметр UIImagePickerController, но у него всегда есть имя, присвоенное ему методами (средство выбора). Что я могу использовать, чтобы узнать, к какому UIImagePickerController обращаться?


person byteSlayer    schedule 08.09.2012    source источник


Ответы (3)


Я думаю, вы можете сохранить ссылку на каждый сборщик, а затем проверить, является ли это одним и тем же экземпляром. Хотя я бы поставил под сомнение использование нескольких разных экземпляров средства выбора, можете ли вы просто настроить один? Кроме того, они возвращают практически одинаковые результаты в любой конфигурации, вы можете изучить словарь результатов для конкретных нужд.

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

//In delegate
if ([self.oneImagePicker isEqual:picker]) ...
person Dmitry Shevchenko    schedule 08.09.2012
comment
Да, но каждый сборщик возвращает изображение, используемое для разных целей, которое мне нужно сохранить где-нибудь еще. Как я могу сравнить экземпляры сборщика ??? - person byteSlayer; 08.09.2012

Одно из решений для вас может быть таким:

Если вы установите значение «tag» для своих различных средств выбора, один из параметров, отправленных методам делегата, будет включать средство выбора, которое вызвало срабатывание метода делегата, и если вы посмотрите на его значение «tag», вы знать, какой это был сборщик.

Другим решением может быть установка каждого средства выбора на ivar или свойство, а затем сравнение параметра средства выбора, отправленного методу делегата, чтобы увидеть, какой из них соответствует какому ivar или свойству (т.е. одинаковы ли адреса объектов?).

person Michael Dautermann    schedule 08.09.2012
comment
Могу ли я просто установить для свойства тега сборщика все, что захочу? - person byteSlayer; 08.09.2012
comment
ну, я попытался это сделать, но UIImagePickerController не имеет свойства тега ... - person byteSlayer; 08.09.2012
comment
У него есть представление, у которого есть свойство тега, которое можно установить. См. документацию ApplePickerPicker / a. > и вы увидите, что он происходит от UIViewController. - person Michael Dautermann; 08.09.2012

Вы можете определить, какое средство выбора вы обрабатываете в делегате - например, изучите свойство тега - или создайте подкласс UIPopoverController, чтобы управлять своим всплывающим окном, и сделать его делегатом ImagePicker. Ему нужно будет передать выбранную информацию обратно в основной класс - вы можете сделать это, реализовав метод делегата popoverControllerShouldDismissPopover и проверив свойство вашего подкласса.

person user3927993    schedule 11.08.2014