我在这一个简单的斯威夫特项目:的UIImagePickerController和观点是不是在窗口层次
的ViewController一个(class ViewController: UIViewController
)提出的ViewController乙 - (class WebViewController: UIViewController, WKNavigationDelegate, CLLocationManagerDelegate, WKScriptMessageHandler
)。
视图控制器B是本质上只是一个WKWebView,这里是它的viewDidLoad()
:
let contentController = WKUserContentController();
contentController.addScriptMessageHandler(
self,
name: "eventHandler"
)
let config = WKWebViewConfiguration()
config.userContentController = contentController
webView = WKWebView(frame: CGRectZero, configuration: config)
webView.navigationDelegate = self
webView.allowsBackForwardNavigationGestures = false
view = webView
因此,提出的ViewController B时的,我基本上只是对整个屏幕上的网页浏览器。
我遇到的问题是,如果用户(同时在网页上),点击“文件上传/文件选择器”,我第一次看到这一点:
型公共过去了。商品不符合public.content或 public.data。如果您要导出新类型,请确保它 符合适当的父类型。 UICollectionViewFlowLayout的行为未定义,因为项目宽度必须小于UICollectionView的宽度减去 insets左右值,减去内容插入左右 值的宽度。
相关UICollectionViewFlowLayout实例是 < _UIAlertControllerCollectionViewFlowLayout:0x12e30f270>,它是 附接到; 动画= {bounds.origin =; bounds.size =; position =; }; layer =; contentOffset:{0,0}; contentSize:{0,0}>收集 视图布局:< _UIAlertControllerCollectionViewFlowLayout: 0x12e30f270>。
然后,如果用户选择从iOS选项列表“拍照或录像”或“图片库”,我得到这个:
警告:试图提出的UIImagePickerController:0x12d192200上 我.WebViewController:0x12e2883e0其视图不在窗口 的层次结构中!
结果是:从来没有出现
- 照片库选择器//相机应用。
- 的ViewController乙经历动画驳回,出于某种原因。
有没有人有什么建议?我试图提供相关的代码,但如果需要,我可以粘贴更多。谢谢。
- 更新--------
好了,所以更多的研究后,实际上是两回事事情:
第一个错误是一个功能如何通过移动浏览器处理“文件选择器”。 See here ...事情的宏伟计划,没什么大不了的。
第二个错误
Attempt to present UIImagePickerController...
- 两个更糟糕的 - 是丑陋的。
如果具有WKWebView一个的ViewController从另一个的ViewController呈现然后,在用户试图“选择”的图像(从库或照相机)的iOS将试图呈现UIImagePicker 从您的WKWebView ViewController,这是你想要的。
不幸的是,由于我还不知道的原因,用户试图“挑选”图片的行为也会导致iOS解雇所呈现的视图控制器......在这种情况下,您的WKWebView控制器:(因此,WKWebView的ViewController关闭,所以它不在窗口层次结构时,它试图呈现UIImagePicker - 因此,错误。我的解决方案(这是很hacky,但适用于我的具体用例如下;我希望这可以帮助某人:
- 实例化WKWebView ViewController(ViewController乙)
- 设置VC乙作为应用程序的根视图控制器
- 当前VC乙从的ViewController甲
- 辞退VC甲
这实质上使得它如此的WKWebView不能被解雇,避开了这个问题。
let storyboard = UIStoryboard(name: "Main", bundle: nil)
let vc = storyboard.instantiateViewControllerWithIdentifier("Browser") as! WebViewController
UIApplication.sharedApplication().keyWindow?.rootViewController = vc
self.presentViewController(vc, animated: false, completion: {() -> Void in
self.dismissViewControllerAnimated(false, completion: nil)
})
我现在有同样的情况。至于第一个问题:它只出现在模拟器上,但不出现在实际设备上。第二个问题通过https://stackoverflow.com/questions/37380333 – Jurasic