UIWebView webViewDidLoadFinish method not called

后端 未结 6 939
南笙
南笙 2021-02-05 22:50

I\'ve been playing around with web views in swift this evening, but have run into a bit of an issue.

For some reason I\'m not able to get the webViewDidStartLoad or webV

相关标签:
6条回答
  • 2021-02-05 23:01

    Try this!

    var req = NSURLRequest(URL: url)
    webView.delegate = self
    webView.loadRequest(req)
    
    0 讨论(0)
  • 2021-02-05 23:01

    I experienced the same issue, even I did confirmed the UIWebViewDelete to self and implemented its methods.

    //Document file url
    var docUrl = NSURL(string: "https://www.google.co.in/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&ved=0ahUKEwjjwPSnoKfNAhXFRo8KHf6ACGYQFggbMAA&url=http%3A%2F%2Fwww.snee.com%2Fxml%2Fxslt%2Fsample.doc&usg=AFQjCNGG4FxPqcT8RXiIRHcLTu0yYDErdQ&sig2=ejeAlBgIZG5B6W-tS1VrQA&bvm=bv.124272578,d.c2I&cad=rja")
    
    let req = NSURLRequest(URL: docUrl!)
    webView.delegate = self
    //here is the sole part
    webView.scalesPageToFit = true
    webView.contentMode = .ScaleAspectFit
    webView.loadRequest(req)
    

    above logic worked perfectly with test URl I got from quick google search.

    But I when I replaced with mine. webViewDidFinishLoad never get called.

    then How we solved?

    On backed side we had to define content-type as document in headers. and it works like charm.

    So please make sure on your server back-end side as well.

    0 讨论(0)
  • 2021-02-05 23:19

    For other's who might make it here. I had put my delegate methods in a private extension which couldn't be accessed by the delegate caller. Once I changed the extension to internal the delegates started to get called properly.

    0 讨论(0)
  • 2021-02-05 23:20

    There is my detailed solution for Swift 3:

    1) in class declaration write the UIWebViewDelegate. For example:

    class MyViewController: UIViewController, UIWebViewDelegate {

    2) of course in storyboard make link to your UIViewController like this: @IBOutlet weak var webView: UIWebView!

    3) in the func viewDidLoad add one line: self.webView.delegate = self

    Nothing more. Special thinks to LinusGeffarth and LLIAJLbHOu for idea.

    0 讨论(0)
  • 2021-02-05 23:21

    Here's my 2 cents battling with the same problem in SWIFT 3:

    class HintViewController: UIViewController, UIWebViewDelegate
    

    Declare the delegate methods this way (note the declaration of the arguments):

    func webViewDidStartLoad(_ webView: UIWebView)
    func webViewDidFinishLoad(_ webView: UIWebView)
    

    Remember to set self to the webview's delegate property either in Interface Builder (Select the webview, drag from the delegate outlet to the webview from the Connections Inspector OR programmatically: self.webview.delegate = self)

    0 讨论(0)
  • 2021-02-05 23:23

    As others noted, setting the delegate of UIWebView and conforming to the UIWebViewDelegate protocol is the best possible solution out there.

    0 讨论(0)
提交回复
热议问题