Zack Cheang Weng Seong
Zack Cheang Weng Seong

Reputation: 338

webView didFinish Navigation never gets called

I am trying to get the splash view ( back_button ) to remove itself once the webpage fully loads, I had done quite a bit of researching and they always point to the same code as an answer. However, mine will not get called. Can somebody advise what I am doing wrong?

import UIKit
import WebKit

class ViewController: UIViewController {


    @IBOutlet weak var LoadingView: UIImageView!
    var webView: WKWebView?
    var bgImage: UIImageView?
    var imageViewObject :UIImageView?

    override func viewDidLoad() {
        super.viewDidLoad()

        //var imageViewObject :UIImageView

        let screenSize: CGRect = UIScreen.main.bounds
        imageViewObject = UIImageView(frame:CGRect(x:0,y: 0, width: screenSize.width, height: screenSize.height))
        imageViewObject?.image = UIImage(named:"back_image")
        webView?.navigationDelegate = self as? WKNavigationDelegate
        self.view.addSubview(imageViewObject!)
        let myURL = URL(string: "https://www.google.com")
        let myRequest = URLRequest(url: myURL!)
        _ = webView?.load(myRequest)
    }

    override func loadView() {
        super.loadView()

        //self.view.sendSubview(toBack: imageViewObject)
        //self.view = self.LoadingView
        self.webView = WKWebView()
        self.view = self.webView

    }

    @IBAction func BackButton(_ sender: Any) {

        if(webView?.canGoBack)!
        {
            webView?.goBack();
        }
    }



    func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {
        print("TEST")
        imageViewObject?.removeFromSuperview()
    }


     func webViewDidFinishLoad(webView: WKWebView) {
        imageViewObject?.removeFromSuperview()
        self.view = self.webView

     }
    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }


}

Upvotes: 1

Views: 3147

Answers (2)

Zack Cheang Weng Seong
Zack Cheang Weng Seong

Reputation: 338

I fixed this by making

webView?.navigationDelegate = self

and adding this to the Class

class ViewController: UIViewController, WKNavigationDelegate

Upvotes: 1

Nancy Madan
Nancy Madan

Reputation: 447

you have to conform to it's protocol delegate by putting this line of code in viewDidLoad

webView?.uiDelegate = self

after doing that , now if you want to use delegation method's you have to put your viewController as a subclass of UIWebViewDelegate

class ViewController: UIViewController ,UIWebViewDelegate{

Upvotes: 2

Related Questions