如何在 Swift 中使用 WKwebView 制作一个 activity 指示符
How to make an activity indecator with a WKwebView in Swift
我正在尝试用 Swift 制作一个 iOS 应用程序,我已经整理出可以完美运行的 webView,但是现在我想实现一个 activity 指示器。它显示正确并且是动画的,但是当页面加载时,activity 指示器不会消失。
这是我的代码:
import UIKit
import WebKit
class FirstViewController: UIViewController {
@IBOutlet var webview: WKWebView!
// @IBOutlet var bg: UIView!
// @IBOutlet var logo: UIImageView!
@IBOutlet var ActInd: UIActivityIndicatorView!
// @IBOutlet var LoadingLabel: UILabel!
override func viewDidLoad() {
super.viewDidLoad()
let url = URL(string: "https://www.google.com")
let request = URLRequest(url: url!)
webview.load(request)
// Do any additional setup after loading the view, typically from a nib.
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
func webViewDidStartLoad(_ : WKWebView) {
ActInd.startAnimating()
//LoadingLabel.isHidden = true
//logo.isHidden = true
//bg.isHidden = true
}
func webViewDidFinishLoad(_ : WKWebView){
ActInd.stopAnimating()
// LoadingLabel.isHidden = true
//logo.isHidden = true
//bg.isHidden=true
}
}
如果有人能帮我让 activity 指示器消失,我将不胜感激。
提前致谢
尝试设置
ActInd.hidesWhenStopped = true // In viewDidLoad
在 view did load 上只是启动你的指示器,而在 webViewDidFinishLoad 上只是隐藏那个加载器。
永远不会调用这些方法。
因为,您还没有将 ViewController 设置为 NavigationDelegate。它需要符合WKNavigationDelegate。然后,您可以在 viewDidLoad() 函数中设置委托:
webview.navigationDelegate = self
您调用的2个方法似乎也不存在。这些是等效的委托方法:webView(:didCommit:) and webView(:didFinish:)
您可以在故事板中设置 "Hides when stopped" 和 "Animated" 或按照此 中的说明以编程方式进行设置。
您还应该看看 API Design guidelines 解释应该如何编写代码。特别是你应该:
Follow case conventions. Names of types and protocols are UpperCamelCase. Everything else is lowerCamelCase.
符合WKNavigationDelegate,可以跟踪webView进程..
The methods of the WKNavigationDelegate protocol help you implement custom behaviors that are triggered during a web view's process of accepting, loading, and completing a navigation request.
您可以使用两种方法:
func webView(WKWebView, didStartProvisionalNavigation: WKNavigation!)
当 Web 内容开始在 Web 视图中加载时调用。
在这里您可以显示 activity 指标
func webView(WKWebView, didFinish: WKNavigation!)
导航完成时调用。
有关更多信息,请查看 WKNavigationDelegate documentation
步骤如下:
1- 符合 WKNavigationDelegate。
2- 将您的视图控制器指定为您的 web 视图的 navigationDelegate。
3- 实施 didStartProvisionalNavigation
和 didFinish
方法
示例:
class ViewController: UIViewController, WKNavigationDelegate {
@IBOutlet var webview: WKWebView!
override func viewDidLoad() {
super.viewDidLoad()
webview.navigationDelegate = self
/*
....
*/
}
func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {
// hide/stop indicator
}
func webView(_ webView: WKWebView, didStartProvisionalNavigation navigation: WKNavigation!) {
//show your activity
}
}
我正在尝试用 Swift 制作一个 iOS 应用程序,我已经整理出可以完美运行的 webView,但是现在我想实现一个 activity 指示器。它显示正确并且是动画的,但是当页面加载时,activity 指示器不会消失。
这是我的代码:
import UIKit
import WebKit
class FirstViewController: UIViewController {
@IBOutlet var webview: WKWebView!
// @IBOutlet var bg: UIView!
// @IBOutlet var logo: UIImageView!
@IBOutlet var ActInd: UIActivityIndicatorView!
// @IBOutlet var LoadingLabel: UILabel!
override func viewDidLoad() {
super.viewDidLoad()
let url = URL(string: "https://www.google.com")
let request = URLRequest(url: url!)
webview.load(request)
// Do any additional setup after loading the view, typically from a nib.
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
func webViewDidStartLoad(_ : WKWebView) {
ActInd.startAnimating()
//LoadingLabel.isHidden = true
//logo.isHidden = true
//bg.isHidden = true
}
func webViewDidFinishLoad(_ : WKWebView){
ActInd.stopAnimating()
// LoadingLabel.isHidden = true
//logo.isHidden = true
//bg.isHidden=true
}
}
如果有人能帮我让 activity 指示器消失,我将不胜感激。
提前致谢
尝试设置
ActInd.hidesWhenStopped = true // In viewDidLoad
在 view did load 上只是启动你的指示器,而在 webViewDidFinishLoad 上只是隐藏那个加载器。
永远不会调用这些方法。
因为,您还没有将 ViewController 设置为 NavigationDelegate。它需要符合WKNavigationDelegate。然后,您可以在 viewDidLoad() 函数中设置委托:
webview.navigationDelegate = self
您调用的2个方法似乎也不存在。这些是等效的委托方法:webView(:didCommit:) and webView(:didFinish:)
您可以在故事板中设置 "Hides when stopped" 和 "Animated" 或按照此
您还应该看看 API Design guidelines 解释应该如何编写代码。特别是你应该:
Follow case conventions. Names of types and protocols are UpperCamelCase. Everything else is lowerCamelCase.
符合WKNavigationDelegate,可以跟踪webView进程..
The methods of the WKNavigationDelegate protocol help you implement custom behaviors that are triggered during a web view's process of accepting, loading, and completing a navigation request.
您可以使用两种方法:
func webView(WKWebView, didStartProvisionalNavigation: WKNavigation!)
当 Web 内容开始在 Web 视图中加载时调用。
在这里您可以显示 activity 指标
func webView(WKWebView, didFinish: WKNavigation!)
导航完成时调用。
有关更多信息,请查看 WKNavigationDelegate documentation
步骤如下:
1- 符合 WKNavigationDelegate。
2- 将您的视图控制器指定为您的 web 视图的 navigationDelegate。
3- 实施 didStartProvisionalNavigation
和 didFinish
方法
示例:
class ViewController: UIViewController, WKNavigationDelegate {
@IBOutlet var webview: WKWebView!
override func viewDidLoad() {
super.viewDidLoad()
webview.navigationDelegate = self
/*
....
*/
}
func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {
// hide/stop indicator
}
func webView(_ webView: WKWebView, didStartProvisionalNavigation navigation: WKNavigation!) {
//show your activity
}
}