Я обнаружил, что при компиляции для 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.
Кто-то нашел такую же ситуацию и некоторое обходное решение?