我在這一個簡單的斯威夫特項目:的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