iOS 開發之路(WKWebView內嵌HTML5之圖片上傳) 五

来源:http://www.cnblogs.com/jiajin/archive/2016/11/18/6077160.html
-Advertisement-
Play Games

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 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • ...
  • 前言 啦啦啦~大家好,又見面啦~ 本篇博文講和大家一起完成一個需要註冊、登錄的備忘錄的,一起學習 SharedPreferences 的基本使用,學習 Android 中常見的文件操作方法,複習 Android 界面編程。 直接進入正題~ 基礎知識 1.SharedPreferences 的使用 使 ...
  • 接觸微信支付之前聽說過這是一個坑,,,心裡已經有了準備。。。我以為我沒準跳坑出不來了,沒有想到我填上了,調用成功之後我感覺公司所有的同事都是漂亮的,隔著北京的大霧霾我仿佛看見了太陽~~~好了,裝逼結束。。。進入正題 開發準備: 1.在微信開放平臺申請賬號 2.成功後創建應用,就是填一些看似很官方很正 ...
  • publicclassMainActivityextendsAbBaseActivity{ privatestaticfinalString TAG ="MainActivity"; privateMyApplication myApplication; privateContext mContex ...
  • adb全程為Android Debug Bridge,字面意思就是安卓調試橋接。就是android系統提供的一套 工具幫我們建議一個連接android設備的通道,然後在電腦上發送一些指令,完成工作。 android設備得先打開選項settings-applications-development-U ...
  • R G B 值 R G B 值 R G B 值 黑色 0 0 0 #000000 黃色 255 255 0 #FFFF00 淺灰藍色 176 224 230 #B0E0E6 象牙黑 41 36 33 #292421 香蕉色 227 207 87 #E3CF57 品藍 65 105 225 #4169 ...
  • 提交AppStore時候被拒絕 拒絕原因:Your app declares support for audio in the UIBackgroundModes key in your Info.plist, but we were unable to play any audible conte ...
  • 在iOS開發過程中經常需要與伺服器進行數據通訊,JSON就是一種常用的高效簡潔的數據格式。 問題: 在項目中,一直遇到一個坑的問題,程式在獲取某些數據之後莫名崩潰。原因是:由於伺服器的資料庫中有些欄位為空,然後以JSON形式返回給客戶端時就會出現這樣的數據:repairs = "<null>" 這個 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...