swift - uiactivity 和 uiwebview 委托
问题描述
我的项目中有一个 uiactivity 视图。我想在页面加载时开始制作动画,并在 webview 最终加载时停止并隐藏。这在我的情况下不起作用。
我曾尝试使用 UIWebViewDelegate,但它已被弃用。
class WebviewViewController: UIViewController {
@IBOutlet var webView: UIWebView!
@IBOutlet weak var activityIndicator: UIActivityIndicatorView!
let disposeBag = DisposeBag()
var specURL:String?
override func viewDidLoad() {
super.viewDidLoad()
configureUIActivityView()
_ = loadWebview()
.subscribe(onSuccess: { url in
DispatchQueue.main.async {
self.webView.loadRequest(URLRequest(url: url))
self.activityIndicator.stopAnimating()
self.activityIndicator.isHidden = true
}
})
}
func loadWebview() -> Single<URL> {
return Single<URL>.create { single in
guard let url = URL(string: self.specURL!.trimmingCharacters(in: .whitespacesAndNewlines)) else {
assertionFailure("no view available")
//single(.error(NetworkError.noImage))
return Disposables.create {}
}
single(.success(url))
return Disposables.create {}
}
}
}
解决方案
最好使用 WKWebView 来实现,因为正如您提到的 UIWebViewDelegate 已被弃用。
下面是一个使用 KVO 监控 WKWebView 加载状态的简单示例。
import WebKit
class ViewController: UIViewController, WKUIDelegate {
private var webView: WKWebView!
override func loadView() {
let webConfiguration = WKWebViewConfiguration()
webView = WKWebView(frame: .zero, configuration: webConfiguration)
webView.uiDelegate = self
view = webView
webView.addObserver(self, forKeyPath: "loading", options: .new, context: nil)
}
override func viewDidLoad() {
super.viewDidLoad()
let myURL = URL(string: "http://www.apple.com")
let myRequest = URLRequest(url: myURL!)
webView.load(myRequest)
}
override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) {
guard let keyPath = keyPath, let change = change else { return }
switch keyPath {
case "loading":
if let loading = change[.newKey] as? Bool {
print("Is webview loading: \(loading)")
}
default:
break
}
}
deinit {
webView.removeObserver(self, forKeyPath: "loading")
}
}
推荐阅读
- mysql - LibreOffice Base 数据透视表以获得更好的报告,无需计算值
- android - 找不到路径“/content:/com.android.externalstorage.documents/document/6759-130B%3ANew%20Text%20Document.txt”的一部分
- python-3.x - python 3.8 flask apache 2.4 wsgi multiprocessing RuntimeError: fork not supported for subinterpreters
- c# - Quartz 作业不能使用 autofac 和带有服务的构造函数运行
- webpack - Workbox-webpack-plugin 对我来说不能离线工作
- python - 使用 BS4 构造最短的有效 css 选择器
- python - google colab pytorch 版本错误(课程 231n)
- java - Java sublime.build 在一个目录中工作,但在另一个目录中不工作
- javascript - Javascript:轮播活动点和左右按钮
- kubernetes - 禁止:用户,“代码”:使用 curl 访问 kube-apiserver 时出现 403 错误