UIWebView webViewDidLoadFinish método no llamado

He estado jugando rápido con vistas web esta noche, pero me he encontrado con un problema.

Por alguna razón, no puedo hacer que se disparen los methods webViewDidStartLoad o webViewDidFinishLoad. En mi storyboard, tengo una salida llamada webView vinculada a mi elemento UIWebView.

¿Alguien puede ayudarme con lo que estoy haciendo mal?

Este es mi file viewController.swift:

import UIKit class ViewController: UIViewController, UIWebViewDelegate { @IBOutlet var webView : UIWebView var url = NSURL(string: "http://google.com") override func viewDidLoad() { super.viewDidLoad() //load initial URL var req = NSURLRequest(URL : url) webView.loadRequest(req) } func webViewDidStartLoad(webView : UIWebView) { //UIApplication.shanetworkingApplication().networkActivityIndicatorVisible = true println("AA") } func webViewDidFinishLoad(webView : UIWebView) { //UIApplication.shanetworkingApplication().networkActivityIndicatorVisible = false println("BB") } } 

¡Prueba esto!

 var req = NSURLRequest(URL: url) webView.delegate = self webView.loadRequest(req) 

Experimenté el mismo problema, incluso confirmé el UIWebViewDelete y implementé sus 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) 

La lógica anterior funcionó perfectamente con la testing URl que obtuve de la búsqueda rápida de Google.

Pero yo cuando reemplacé con el mío. webViewDidFinishLoad nunca se llama.

Entonces, ¿cómo resolvimos?

En el lado respaldado, tuvimos que definir el tipo de contenido como documento en los encabezados. y funciona como encanto.

Por lo tanto, asegúrese de que también esté en el lado del backend de su server.

Como otros señalaron, establecer la delegada de UIWebView y UIWebView con el protocolo UIWebViewDelegate es la mejor solución posible.

Para otros que podrían llegar aquí. Había puesto mis methods de delegado en una private extension que el llamante delegado no podía acceder. Una vez que cambié la extensión a internal los delegates comenzaron a recibir llamadas correctamente.

Aquí están mis 2 centavos luchando con el mismo problema en SWIFT 3 :

 class HintViewController: UIViewController, UIWebViewDelegate 

Declare los methods de delegado de esta manera (anote la statement de los arguments):

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

Recuerde configurar la propiedad delegado de la window web en Interface Builder (Seleccione la vista web, arrástrelo desde la salida delegada a la vista web desde el Inspector de conexiones O mediante progtwigción : self.webview.delegate = self)

Existe mi solución detallada para Swift 3:

1) en la statement de class escriba el UIWebViewDelegate . Por ejemplo:

class MyViewController: UIViewController, UIWebViewDelegate {

2) Por supuesto, en el guión gráfico haz un enlace a tu UIViewController así: @IBOutlet weak var webView: UIWebView!

3) en la function viewDidLoad agrega una línea: self.webView.delegate = self

Nada mas. Special piensa en LinusGeffarth y LLIAJLbHOu por idea.