1. 程式人生 > >swift版webview載入網頁(帶進度條)

swift版webview載入網頁(帶進度條)

比較簡單,直接上程式碼

import UIKit

import WebKit

import SnapKit

class CMWebVC:

UIViewController

, WKNavigationDelegate {

    var webUrl: String?

    var webView: WKWebView =WKWebView()

var progressView:UIProgressView = UIProgressView()

    var closeBtn: UIButton!

    override func initVC() {

        webView

.addObserver(self, forKeyPath:"estimatedProgress", options: NSKeyValueObservingOptions.new, context:nil)

webView.navigationDelegate =self

    }

deinit {

        webView.removeObserver(self, forKeyPath:"estimatedProgress")

webView.navigationDelegate =nil

    }

    override func viewDidLoad() {

super.viewDidLoad()

// webview

        view.addSubview(webView)

        webView.snp.makeConstraints { (make)in

            make.width.height.equalToSuperview()

        }

// progressview

view.addSubview(progressView)

        progressView.snp.makeConstraints { (make)in

            make.width.equalToSuperview

()

            make.height.equalTo(3)

            make.top.equalToSuperview()

        }

progressView.tintColor =UIColor.ColorBgTheme()

progressView.isHidden =true

// load url

        if webUrl !=nil {

            webView.load(URLRequest(url:URL(string: webUrl!)!))

        }

        // shear

        self.showRightItem(image:"nav_share") {

        }

    }

    override func viewWillAppear(_ animated:Bool) {

        super.viewWillAppear(animated)

self.closeButton()

    }

    override func viewWillDisappear(_ animated:Bool) {

self.closeBtn.removeFromSuperview()

    }

    func closeButton() {

        if self.closeBtn ==nil {

            self.closeBtn =UIButton(frame: CGRect(x:44, y: 0, width:44, height: 44))

            self.closeBtn.setTitle("關閉", for: .normal)

            self.closeBtn.setTitleColor(UIColor.black, for: .normal)

            self.closeBtn.addAction({ (button)in

                self.navigationController!.popViewController(animated:true)

            })

self.navigationController?.navigationBar.addSubview(self.closeBtn)

        }

    }

    override func observeValue(forKeyPath keyPath:String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) {

        // 載入進度

        if keyPath == "estimatedProgress" {

            let newprogress = change?[.newKey]!as! Float

            let oldprogress = change?[.oldKey]as? Float ??0.0

//不要讓進度條倒著走...有時候goback會出現這種情況

            if newprogress < oldprogress {

                return

            }

            if newprogress == 1 {

                progressView.isHidden =true

                progressView.setProgress(0, animated:false)

            }

            else {

                progressView.isHidden =false

                progressView.setProgress(newprogress, animated:true)

            }

        }

    }

    func webView(_ webView:WKWebView, didFinish navigation: WKNavigation!) {

progressView.isHidden =true

        progressView.setProgress(0, animated:false)

    }

    func webView(_ webView:WKWebView, didFail navigation: WKNavigation!, withError error: Error) {

progressView.isHidden =true

        progressView.setProgress(0, animated:false)

    }

    override func navigateBack() {

        if webView.canGoBack {

            webView.goBack()

        }

        else {

            super.navigateBack()

        }

    }

}


相關推薦

swiftwebview載入網頁進度

比較簡單,直接上程式碼 import UIKit import WebKit import SnapKit class CMWebVC: UIViewController , WKNavigationDelegate {     var webUrl: S

使用WebView載入網頁並帶有進度

   WebView是載入網頁的控制元件,在使用WebView載入網頁的同時,可以顯示進度條,現在就來介紹一下。    一.在佈局中新增ProgressBar控制元件和WebView控制元件 <

使用Jquery開源外掛實現檔案上傳進度

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <

jq上傳多張圖片進度

<!DOCTYPE html><html> <head> <meta charset="UTF-8" /> <title>xhr2</title> </head> <body>&

iOS開發swift非同步載入網路圖片(快取和預設圖片)

iOS開發之swift版非同步載入網路圖片     與SDWebImage非同步載入網路圖片的功能相似,只是程式碼比較簡單,功能沒有SD的完善與強大,支援預設新增圖片,支援本地快取。      非同步載入圖片的核心程式碼如下:  func setZYHWebImage(ur

完美解決Android的WebView載入失敗404,500,顯示的自定義檢視

完美解決Android的WebView載入失敗(404,500),顯示的自定義檢視 好多朋友會在Android開發過程中遇到使用WebView載入html頁面出現404,500等錯誤頁面,也有好多人想自定義這個錯誤頁面,但是在6.0之前,大家覺得自定義錯誤頁面就不好處理了; 之前一

Android使用okhttp封裝多檔案批量下載 進度,取消下載

在網上搜索了很多關於okhttp封裝的網路框架,唯獨沒找到完美實現了多個檔案批量下載的案例,當前使用的最多的也就是okhttp了,所以,我學習了各位大神的封裝後,自己也試著封裝了一個關於okhttp的網路請求框架,方便專案中的使用。 實現的功能基本如下:

WebView 載入資料時顯示進度載入完後再把進度取消並顯示內容

轉載地址:http://blog.sina.com.cn/s/blog_7a66361301011a46.html webview 載入資料時顯示進度條有兩種. 第一種方法 這個是載入資料時顯示進度條 super.onCreate(savedInstanceState);

c#抓取網頁解析js

抓取中國銀行匯率 (phantomjs-1.9.2-windows + Selenium.WebDriver.3.8.0) 直接上程式碼 using LTITools.util; using OpenQA.Selenium; using OpenQA.Selenium.P

用canvas畫一個簡單的圓進度效果

<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge">

【web】js新增附件功能顯示進度——新增附件-demo01

使用input元素新增附件(顯示進度條) 備註:此專案沒有實現上傳附件的功能 專案成品圖: 執行的狀態: 點選上傳的狀態: 以下是專案原始碼: <!DOCTYPE html PUB

WebView載入網頁進度

圖: 程式碼: package com.baofoo.mobile.wallet.common.activity; import android.app.Activity; import android.content.Context; import android

iOS開發載入網頁webview時的菊花小圈

在iOS開發中會有一種情況,就是請求載入一個網頁,有時是H5頁面,當然也是一個網頁,有時候這個網頁裡的內容很多,或者網速很慢的時候就會有一段時間是整個手機白屏,你做不了任何的操作,這樣給使用者的體驗是非常差的 在載入中,但是網頁還沒出現的的時候就會用到一個菊花來提示這個頁面

webview載入網頁新增進度的展示

直接上程式碼 wb.loadUrl(url); wb.setBackgroundColor(0); wb.setWebChromeClient(new WebChromeCl

Fragment中載入網頁WebView監聽Back鍵 ,實現返回上一頁的功能

首先建立一個抽象類BackHandledFragment,該類有一個抽象方法onBackPressed(),所有BackHandledFragment的子類在onBackPressed方法中處理各自對Back事件的消費邏輯。onBackPressed返回布林值,宿主Acti

android中WebView載入網頁設定進度

我們平時在進行安卓開發使用到webview載入網頁時,我們不能準確瞭解網頁的載入進度,因此為了提高使用者體驗,我們在webview中加入進度條顯示載入進度。 程式預覽介面: 一、主介面xml佈局檔案 <LinearLayout xmlns:android="ht

網頁導航菜單的子菜單平鋪背景欄實現

body hover 動態設置 ive 要求 解決方案 滿了 gpo 位置 - 之前給公司做的一個小型知識庫管理網站時遇到一個問題,在這裏記錄下解決的過程。 公司的美工要求首頁導航菜單 要跟他們公司的網站風格保持一致,如圖所示 (子菜單是平鋪的)

Project 2016官方下載啟用工具

Project 2016是一款強大的專案管理軟體,支援甘特圖等等實時專案監控功能,是經理人與專案管理者的強大助手。需要注意的是Project不能從Office套件中進行安裝,需要單獨的下載與安裝,但是執行後卻又能與Office完美結合在一起。 下載連結:https://pan.

C/S模型-多程序-簡易學生-管理系統資料庫

簡介: 【1】資料:   學生資訊:姓名name + 賬號account + 分數score   登入資訊:賬號account + 密碼password(學生、管理員) 【2】C/S模型,使用fork實現多程序互動 【3】Client:   1)登入:學生登入,管理員登陸   2)管理員:修改密

WebView載入網頁及資料

<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><path stroke-linecap="round" d="M5,0 0,2.5 5,5z" id="raphael-