2017-02-17 23 views
0

В моем приложении я использую UIActionSheet и UIImagePickerController. Action Sheet открывает опции (как выбрать фотографию, выбрать видео), а Image Picker Controller открывает библиотеку. Эта система работает хорошо для тестирования устройств iPhone, но для iPad, Action Sheet отлично работает, а контроллер Picker - нет.iOS - Контроллер выбора не открывается. Библиотека фотографий

Я установил необходимые разрешения для iOS10, для камеры и библиотеки фотографий. Это не может быть проблемой.

Мой код для выбора фото:

- (void)selectPhoto { 

    self.imagePickerController.delegate = self; 
    self.imagePickerController.sourceType = UIImagePickerControllerSourceTypePhotoLibrary; 
    self.imagePickerController.mediaTypes = [NSArray arrayWithObjects:(NSString *)kUTTypeImage, nil]; 
    [self presentViewController:self.imagePickerController animated:YES completion:nil]; 
} 

Необходимые методы делегата были написаны либо. И, как я уже говорил, все работает так, как должно быть в iPhone.

При попытке открыть фотобиблиотеку первый я получаю это предупреждающие сообщения:

[Предупреждение] < _UIPopoverBackgroundVisualEffectView 0x147c5ad0> это быть предложено анимировать его непрозрачность. Это вызовет эффект появляться сломаны до непрозрачности не возвращается к 1.

Ничего не сломано, приложение все еще работает (не замораживать). Однако, если я пытаюсь открыть библиотеку фотографий, на этот раз я получаю:

Предупреждения: Попытка представить на , который уже предъявлению (нуль)

Тогда проблема может быть проблемой поповера но я не смог найти ответ. Спасибо!

Edit: Мой поступок метод лист делегат:

-(void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex { 

    [actionSheet dismissWithClickedButtonIndex:buttonIndex animated:YES]; 
    switch (buttonIndex) { 
     case 0: 
      [self selectPhoto]; 
      break; 
     case 1: 
      [self selectVideo]; 
      break; 
     default: 
      break; 
    } 
} 

Edit 2: Я нашел that:

На IPAD, вы должны представить интерфейс браузера, используя поповер в , описанной в initWithContentViewController: и Представление и Отклонение Popover в описании класса UIPopoverController. Если на iPad вы пытаетесь представить интерфейс браузера modally (полноэкранный), система вызывает исключение.

UIPopoverController теперь устарел. Таким образом, я должен использовать другой путь. Если кто-нибудь может мне помочь в этом, я был бы счастлив.

+0

ли 'dismiss' вы ваш' UIActionSheetController' перед представлением 'UIImagePickerController'? –

+0

У меня нет, но теперь я это сделал. Все такой же. – anyName

+0

Пожалуйста, укажите дополнительный код для отклонения предупреждения. Вы должны убедиться в том, чтобы представить сборщик изображений в завершении. Иначе это не сработает. – Fogmeister

ответ

0

Существует список всех какао ключей, которые можно указать в вашем файле Info.plist:

https://developer.apple.com/library/mac/documentation/General/Reference/InfoPlistKeyReference/Articles/CocoaKeys.html

IOS уже требуется разрешение на доступ к микрофону, камеру и медиа-библиотеку ранее (iOS6, iOS7), но с iOS10 приложения будут разбиваться, если вы не представите описание, почему вы просите разрешения.

0

На iPad вы не можете отображать UIImagePickerController popover поверх уже отображаемого на экране UIActionSheet popover.

Заменить

- (void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex 

с

- (void)actionSheet:(UIActionSheet *)actionSheet didDismissWithButtonIndex:(NSInteger)buttonIndex; 

и он должен работать.

И удалите [actionSheet dismissWithClickedButtonIndex:buttonIndex animated:YES];, как только вы нажмете на кнопку, UIActionSheet автоматически отклоняется.

0

Чтобы показать подборщик изображений как на iPhone, так и на iPad, вам необходимо представить его как popover.

Так реализация, чтобы показать свой сборщик изменится на

self.imagePickerController.delegate = self; 
self.imagePickerController.sourceType = UIImagePickerControllerSourceTypePhotoLibrary; 
self.imagePickerController.mediaTypes = [NSArray arrayWithObjects:(NSString *)kUTTypeImage, nil]; 
self.imagePickerController.modalPresentationStyle = UIModalPresentationPopover; //This is needed 
self.imagePickerController.sourceView = self.view; //This is needed 
[self presentViewController:self.imagePickerController animated:YES completion:nil]; 

ли убедитесь, что ваш лист действия отклонило прежде чем представить сборщик.

1

для IPad использовать код, чтобы открыть UIImagePicker

[[NSOperationQueue mainQueue] addOperationWithBlock:^{ 

       [self presentViewController:picker animated:NO completion:nil]; 
      }]; 

 Смежные вопросы

  • Нет связанных вопросов^_^