2016-03-14 85 views
6

我在这一个简单的斯威夫特项目:的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其视图不在窗口 的层次结构中!

结果是:从来没有出现

  1. 照片库选择器//相机应用。
  2. 的ViewController乙经历动画驳回,出于某种原因。

有没有人有什么建议?我试图提供相关的代码,但如果需要,我可以粘贴更多。谢谢。

- 更新--------

好了,所以更多的研究后,实际上是两回事事情:

  1. 第一个错误是一个功能如何通过移动浏览器处理“文件选择器”。 See here ...事情的宏伟计划,没什么大不了的。

  2. 第二个错误Attempt to present UIImagePickerController... - 两个更糟糕的 - 是丑陋的。

如果具有WKWebView一个的ViewController从另一个的ViewController呈现然后,在用户试图“选择”的图像(从库或照相机)的iOS将试图呈现UIImagePicker 您的WKWebView ViewController,这是你想要的。

不幸的是,由于我还不知道的原因,用户试图“挑选”图片的行为也会导致iOS解雇所呈现的视图控制器......在这种情况下,您的WKWebView控制器:(因此,WKWebView的ViewController关闭,所以它不在窗口层次结构时,它试图呈现UIImagePicker - 因此,错误。我的解决方案(这是很hacky,但适用于我的具体用例如下;我希望这可以帮助某人:

  1. 实例化WKWebView ViewController(ViewController乙
  2. 设置VC乙作为应用程序的根视图控制器
  3. 当前VC乙的ViewController甲
  4. 辞退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) 
}) 
+0

我现在有同样的情况。至于第一个问题:它只出现在模拟器上,但不出现在实际设备上。第二个问题通过https://stackoverflow.com/questions/37380333 – Jurasic

回答

0

如果您在viewDidLoad(){}功能做INT目前然后尝试移动代码到覆盖viewDidAppear(animated: Bool) {}今天我有同样的问题,并固定它。

+0

回答解决我有同样的问题,但是这个解决方案没有为我解决它。 –

相关问题