首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >uiactivity和uiwebview委托

uiactivity和uiwebview委托
EN

Stack Overflow用户
提问于 2018-06-11 03:39:06
回答 1查看 57关注 0票数 0

我在我的项目中有一个uiactivity视图。我想在页面加载时开始动画,并在webview最终加载时停止和隐藏。这对我来说是行不通的。

我曾尝试使用UIWebViewDelegate,但它已被弃用。

代码语言:javascript
复制
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 {}
        }
    }
}
EN

回答 1

Stack Overflow用户

发布于 2018-06-11 04:30:19

由于您提到的UIWebViewDelegate已被弃用,因此最好使用WKWebView来实现。

下面是一个使用KVO监控WKWebView加载状态的简单示例。

代码语言:javascript
复制
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")
     }
 }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50787401

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档