2011-07-04 27 views
39

Tüm programlama işinde çok yeniyim ve bir sonraki görünümün yükleme simgesi görüntülenmeyecek şekilde iphone programında UIWebView içeriğini temizlemek için herhangi bir yol olup olmadığını merak ediyordum son görüşün önünde. Çok teşekkürler, ThomasBir UIWebView Nasıl Temizlenir

cevap

139

URL'yi about:blank olarak ayarlamayı deneyin ve sayfayı yeniden yükleyin.

+2

Teşekkür Mate XCODE, ben u oy verir miydiniz kadar ama kendimi yeterince rütbe yok –

+0

Rica ederim! –

+2

"webViewDidFinishLoad" temsilci yöntemi ile sonuçlanmayan bir alternatifin farkında mısınız? (nil'ing delegesi çalışılamıyor: açık bir şekilde gerçek içeriğin başka bir yükü tarafından takip ediliyor, bu yüzden hızlı bir şekilde cevap vermesi durumunda delege hazırlığı var ... bu nedenle ilk yükten sonra delege kapatılmalı, daha sonra açılmalı ikinci yük, ancak hepsi uyumsuzdur, bu yüzden ilk yük bitene kadar engelleyemiyorum). –

25

Sadece dokümantasyon amaçlı belki başkası yardımcı olmak için

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

+0

no 'baseURL' ayarlanmasına gerek yok ... [self.webView loadHTMLString: @ "" baseURL: nil]; –

+0

@ChrisAllinson önerilerinize göre bunu basitleştirdim – 2cupsOfTech

+0

Özellikle bir baseURL –

9

Cevap uzantısı içine boş bir html dize yük:

aynı arzuyu (sonraki url yüklemeden önce net içeriği) vardı ama bir UIWebView delegesi, webviewDidFinishLoad:(UIWebView)webview mesajını almak ve yanıt olarak UI'nin başka bir bölümünü güncellemek için ayarlanmıştı.

Sorun: Çağrı içerik temizlemek için de böylece (yanlış-hits almak temsilci yöntemi denir yani net de yapılır, ama temsilci gerçek içeriğidir sadece çağrı beklemek kodlanmış zaman çağrı alma yüklü).

Çözüm: berrak için bilinen URL kullanmak ve bu URL'nin bittiğinde webviewDidFinishLoad: yapılan çağrıları görmezden vardır:

- (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]; 
    } 
} 

Not:

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

aslında yaklaşık kelimeleri" neden: Bu kullanarak : boş "webview'in içerik panelinde metin olarak görünecek!

Son Komplikasyon: Pratikte, benim iki [webview load...] çağrılarım birbirine çok yaklaştığında, açık için "yüklenen" bir etkinlik yerine, web görünümünün ikinci istek lehine iptal ettiğini ve webView: didFailLoadWithError: numaralı telefonun ilk yükleme talebi. Böylelikle, bu olay benzer bir kod koymak zorunda:

- (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

geçirmedikçe işe yaramadığını buldum. Teşekkürler. –

1

Swift 4.0, 9

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