Я обнаружил, что при компиляции для iOS 8 (и работающей в iOS 8), UIWebView не может отображать устройство выбора камеры/изображения, если UIWebView находится в контроллере представления, представленном модально. Он работает без проблем в представлении контроллеров, непосредственно "висящих" из окна rootViewController или контроллеров просмотра, выталкиваемых из него.
Приложение-тест можно найти в https://dl.dropboxusercontent.com/u/6214425/TestModalWebCamera.zip, но я опишу его ниже.
Мое тестовое приложение (построенное с помощью раскадровки, но реальное приложение не использует их) имеет два контроллера вида (неорганно названных ViewController и ViewController2). ViewController содержится в UINavigationController, который является контроллером корневого представления. ViewController содержит a UIWebView (работает нормально), кнопка, которая "показывает" ( "толкает" ) ViewController2, и UIBarButtonItem, которая представляет модально ViewController2. ViewController2 имеет другой UIWebView, который работает, когда "толкается", но не "представлен".
Оба ViewController и ViewController2 загружаются с помощью:
- (void)viewDidLoad {
[super viewDidLoad];
[self.webView loadHTMLString:@"<input type=\"file\" accept=\"image/*;capture=camera\">" baseURL:nil];
}
При попытке использовать модальный UIWebView Xcode печатает на консоли консоль и отклоняет приложение модальное:
Warning: Attempt to present <UIImagePickerController: 0x150ab800> on <ViewController2: 0x14623580> whose view is not in the window hierarchy!
Моя нынешняя теория состоит в том, что изменения в UIActionSheet до UIAlertController могли привести к этой ситуации, но ее довольно сложно доказать. На всякий случай я открою радар с Apple.
Кто-то нашел такую же ситуацию и некоторое обходное решение?