HTML5頁面的圖片上傳功能在iOS端的實現。 首先,頁面上用的是plupload組件,在wkwebview上存在兩個坑需要修複才能正常使用。 問題:在webview上點擊選擇照片/相機拍攝,就會出現whose view is not in the window hierarchy這個錯誤。其實st ...
HTML5頁面的圖片上傳功能在iOS端的實現。
首先,頁面上用的是plupload組件,在wkwebview上存在兩個坑需要修複才能正常使用。
問題:在webview上點擊選擇照片/相機拍攝,就會出現whose view is not in the window hierarchy這個錯誤。其實stackoverflow上有這個錯誤的解釋,但是我們並不能採取相應的方法去解決,因為咱們這個新彈出的UIPictureView並不是由我們決定在viewDidLoad還是viewWillAppear出現的。
解決方案:比方說三個視圖(NavagationViewController\mainViewController\webViewController)將NavagationViewController設置為根視圖:
UIApplication.shared.keyWindow?.rootViewController = anotherView
然後mainViewController在storyboard裡面設置為NavagationViewController的rootviewcontroller。再然後通過push跳轉視圖到webViewController:
let myStoryBoard = self.storyboard let dblzView:UITableViewController = (myStoryBoard?.instantiateViewController(withIdentifier: "dblz"))! as! UITableViewController self.navigationController?.pushViewController(dblzView, animated: true)
這裡邊出錯的原因是因為我設計的app一打開的initial View Controller是一個登陸頁,所以登陸頁跳轉到mainViewController後要把mainViewController設置為根視圖。
還有一個問題是點擊選擇照片彈出照片選擇視圖沒問題,但是選好圖片之後立刻跳轉到webview,就像是刷新了一下。這裡出錯的原因是因為wkwebview的裝載千萬不能放在viewDidAppear,必須放到viewDidLoad里。
這個問題我在stackoverflow上查了巨久都沒找到問題,然後越查越遠,問題被我搞得巨複雜,最後在apple develop中心看到一個人的帖子才解決的。
override func viewDidLoad() { self.view.addSubview(self.wk) } override func viewDidAppear() { //self.view.addSubview(self.wk)放在這也能正常載入出webview,但是圖片上傳就會出Bug
}
所以有時候,不能把一個簡單的問題複雜化。
最後,開發環境:swift 3 iOS 10 Xcode 8