Как использовать навигацию didFinish в WKWebView, переданном в другой класс - PullRequest
0 голосов
/ 30 мая 2019

Я настраиваю приложение, в котором объект WKWebView создается в одном классе, а затем передается другому классу для обработки, но когда я использую didFinish navigation во втором классе, он никогда не вызывается.

Я добавил протокол WKNavigationDelegate и установил navigationDelegate = self

class one: UIViewController {
   var webView: WKWebView = WKWebView();

    override func viewDidLoad(){
      var second = Second()
      second.web = webView;
      second.test()
   } 
}

class second: NSObject, WKNavigationDelegate {
  var web: WKWebView? = nil;

  func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {
     print("Test")
  }

  func test(){
     self.web!.load(URLRequest(url: URL(string: "https://google.com")!))
  }
}

Я никогда не вижу сообщения «Тест».

Ответы [ 2 ]

0 голосов
/ 30 мая 2019
import UIKit
import WebKit

class WKWebViewController: UIViewController, WKNavigationDelegate {

    @IBOutlet weak var webWK: WKWebView!
    @IBOutlet weak var activityIndi: UIActivityIndicatorView!

    override func viewDidLoad() {
        super.viewDidLoad()

        // Do any additional setup after loading the view.

        webWK.navigationDelegate = self
        let appStoreURL = URL(string: "https://google.com")
        webWK.load(URLRequest(url: appStoreURL!))
    }

    func webView(_ webView: WKWebView, didStartProvisionalNavigation navigation: WKNavigation!) {
        activityIndi.startAnimating()
    }

    func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {
        activityIndi.stopAnimating()
    }

}
0 голосов
/ 30 мая 2019

Сделайте это экземпляром var, чтобы сохранить объект, чтобы делегат вызывался

var second = Second() /// << here

override func viewDidLoad(){
  super.viewDidLoad()
  ......
}

func test(){ 
   self.web!.navigationDelegate = self
   self.web!.load(URLRequest(url: URL(string: "https://google.com")!)) 
}
...