我发现,在编译iOS 8(并在iOS 8上运行)时,如果UIWebView
位于通过模态方式呈现的视图控制器中,则UIWebView
无法显示相机/图片选择器。但是,如果UIWebView
位于直接从窗口的rootViewController
“悬挂”的视图控制器或从其推出的视图控制器中,则可以正常工作。
测试应用程序可以在https://dl.dropboxusercontent.com/u/6214425/TestModalWebCamera.zip 找到,但下面我将对其进行描述。
我的测试应用程序(使用storyboard构建,但真实应用程序不使用它们)有两个视图控制器(名称为ViewController
和ViewController2
)。 ViewController
包含在一个UINavigationController
中,这是根视图控制器。 ViewController
包含一个UIWebView
(正常工作),一个“显示”(“推送”)ViewController2
的按钮,以及以模态方式呈现ViewController2
的UIBarButtonItem
。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
的变化可能导致了这种情况,但很难证明。我会向苹果公司提交一个雷达报告,以防万一。
是否有人发现了相同的情况并找到了解决方法?