2011-07-04 16 views
39

Soy muy nuevo en todo el negocio de la programación, y me preguntaba si hay alguna manera de borrar el contenido de un UIWebView en la programación de iphone, para que el símbolo de carga de la siguiente vista no aparezca frente a la última vista. Muchas gracias, ThomasCómo borrar un UIWebView

Respuesta

139

Intente configurar la URL como about:blank y vuelva a cargar la página.

+2

Gracias compañero, yo votaría u pero yo no tengo suficiente rango –

+0

¡De nada! –

+2

¿Conoces una alternativa que no da como resultado el método de delegado 'webViewDidFinishLoad'? (nil'ing delegate no funciona: clear es seguido inmediatamente por otra carga de contenido real, por lo tanto, tenga listo delegate en caso de que responda rápidamente ... por lo que tendría que desactivar delegate hasta después de la primera carga, luego enciéndalo antes segunda carga, pero todo es asíncrono, así que no puedo bloquear hasta que termine la primera carga). –

25

sólo tiene que cargar una cadena HTML vacío en él

[self.webView loadHTMLString:@"" baseURL:nil];

+0

sin necesidad de establecer un 'baseURL' ... [self.webView loadHTMLString: @ "" baseURL: nil]; –

+0

@ChrisAllinson seguro Lo simplifiqué según su sugerencia – 2cupsOfTech

+0

He encontrado que no funciona a menos que pase específicamente un baseURL –

9

extensión respuesta para fines de documentación para ayudar tal vez alguien más:

que tenían el mismo deseo (contenido claro antes de cargar la próxima url), pero tenía un delegado UIWebView configurado para recibir el mensaje webviewDidFinishLoad:(UIWebView)webview y actualizar otra parte de la IU en respuesta.

Problema: la llamada para borrar el contenido de también llamado método delegado, así que conseguir falsos éxitos (es decir, conseguir llamada cuando claro se hace, también, pero delegado se codifica a esperar llamar sólo cuando el contenido real es cargado).

Solución: utilizar una URL conocida por clara, y tienen webviewDidFinishLoad: ignorar llamadas realizadas cuando esa URL está acabado:

- (void) startLoadOfNextURL:(NSURL*)url 
{ 
    // clear: 
    [self.webView loadHTMLString:@"" baseURL:nil]; 

    // Load real next URL 
    NSURLRequest* request = [NSURLRequest requestWithURL:url]; 
    [self.webView loadRequest:request]; 
} 


- (void)webViewDidFinishLoad:(UIWebView *)webView 
{ 
    NSLog(@"WebView finished loading: %@", webView); 
    if ([self.webView.request.URL.absoluteString isEqualToString:@"about:blank"]) { 
     NSLog(@" This is Blank. Ignoring as false event."); 
    } 
    else { 
     NSLog(@" This is a real url"); 
     [self updateUIInSomeWay]; 
    } 
} 

Nota: el uso de este:

[self.webView loadHTMLString:@"about:blank" baseURL:nil]; 

realidad hace que las palabras "acerca : en blanco "para aparecer como texto en el panel de contenido de la vista web!

complicación final: En la práctica, con mis dos [webview load...] llamadas tan juntas, que estaba encontrando que en lugar de un evento "cargado" por la clara, la vista web en realidad estaba cancelando a favor de la segunda petición y llamando webView: didFailLoadWithError: de la primera solicitud de carga. Por lo tanto, tuve que poner un código similar en este caso:

- (void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error 
{ 
    NSLog(@"WebView error on: %@", webView); 
    NSLog(@"Error is: %@", error); 

    NSURL* failingURL = [error.userInfo objectForKey:@"NSErrorFailingURLKey"]; 
    if ([failingURL.absoluteString isEqualToString:@"about:blank"]) { 
     NSLog(@" This is Blank. Ignoring."); 
    } 
    else { 
     NSLog(@" This is a real URL."); 
     [self doSomethingAboutError]; 
    } 
} 
4

Swift, Xcode 7 beta 5

webView.loadRequest(NSURLRequest(URL: NSURL(string: "about:blank")!)) 
+0

Gracias, estaba buscando esto –

1

Swift 4.0, XCODE 9

webView.loadRequest(URLRequest.init(url: URL.init(string: "about:blank")!))