пользователь uiwebview и uiwebview - PullRequest
0 голосов
/ 10 июня 2018

У меня есть представление uiactivity в моем проекте.Я хочу начать анимацию во время загрузки страницы, остановиться и скрыться, когда наконец загрузится веб-просмотр.в моем случае это не работает.

Я пытался использовать 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 {}
        }
    }
}

1 Ответ

0 голосов
/ 10 июня 2018

Лучше использовать WKWebView для достижения этой цели, поскольку, как вы упомянули, UIWebViewDelegate устарела.

Вот простой пример для мониторинга состояния загрузки WKWebView с помощью KVO.

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")
     }
 }
...