Dan*_*Dan 7 ios uivewcontroller swift
我有一个简单的Swift项目,其中:
ViewController A(class ViewController: UIViewController)呈现ViewController B - (class WebViewController: UIViewController, WKNavigationDelegate, CLLocationManagerDelegate, WKScriptMessageHandler).
ViewController 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
Run Code Online (Sandbox Code Playgroud)
因此,当ViewController B出现时,我基本上只在整个屏幕上有一个Web浏览器.
我遇到的问题是,如果用户(在网页上)点击"文件上传/文件选择器",首先我看到:
传入类型public.item不符合public.content或public.data.如果要导出新类型,请确保它符合适当的父类型.未定义UICollectionViewFlowLayout的行为,因为项目宽度必须小于UICollectionView的宽度减去部分插入左右值,减去内容插入左右值.
相关的UICollectionViewFlowLayout实例是<_UIAlertControllerCollectionViewFlowLayout:0x12e30f270>,它附加到; 动画= {bounds.origin =; bounds.size =; 位置=; }; layer =; contentOffset:{0,0}; contentSize:{0,0}>集合视图布局:<_ UIAlertControllerCollectionViewFlowLayout:0x12e30f270>.
然后,如果用户从iOS选项列表中选择"拍摄照片或视频"或"照片库",我会得到:
警告:尝试在My.WebViewController上显示UIImagePickerController:0x12d192200:0x12e2883e0,其视图不在窗口层次结构中!
结果是:
有没有人有什么建议?我试图提供相关代码,但如果需要我可以粘贴更多代码.谢谢.
- 更新--------
好的,经过更多的研究,实际上还有两个不同的事情:
第一个错误是移动浏览器如何处理"文件选择器"的功能. 看到这里 ......宏伟的计划,没什么大不了的.
第二个错误Attempt to present UIImagePickerController...- 两个人更加衰弱 - 更加丑陋.
如果具有WKWebView的ViewController从另一个 ViewController 呈现,那么当用户试图"选择"图像(来自库或相机)时,iOS将尝试从您的WKWebView ViewController 呈现UIImagePicker ,这就是您想要的.
不幸的是,由于我还不知道的原因,用户试图"挑选"图像的行为也会导致iOS解雇所呈现的视图控制器......在这种情况下,它是您的WKWebView控制器:(如此,WKWebView ViewController解散,因此当它试图呈现UIImagePicker时它不在窗口层次结构中 - 因此,错误.
我的解决方案(非常hacky,但适用于我的特定用例),如下所示; 我希望这可以帮助别人:
这基本上使得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)
})
Run Code Online (Sandbox Code Playgroud)
如果您当前正在函数中执行 intviewDidLoad(){}操作,请尝试将代码移至覆盖中viewDidAppear(animated: Bool) {}我今天遇到了同样的问题并修复了它。
| 归档时间: |
|
| 查看次数: |
2638 次 |
| 最近记录: |