2013-04-12 26 views
5

Mam UIWebView, który działa poprawnie. Delegat działa. Po otwarciu adresu URL zdarzenia shouldStartLoadWithRequest i webViewDidFinishLoad są uruchamiane.ios - UIWebView DidFinishLoad nie nazywa się

Ale kiedy na przykład klikam wynik wyszukiwania Google, tylko shouldStartLoadWithRequest jest uruchamiany, a webViewDidFinishLoad nigdy nie jest wywoływany.

Powoduje to problemy, ponieważ jeśli umieściłem wskaźnik "ładowanie ..." na shouldStartLoadWithRequest, w takich przypadkach wskaźnik nadal pozostaje wyświetlany po prawidłowym załadowaniu strony.

Każdy pomysł, dlaczego tak się dzieje?

+1

Ustaw delegata na swoją stronę internetową –

+2

Dodaj trochę kodu. –

Odpowiedz

1

w pliku .h dodać <UIWebViewDelegate>

aw .m:

yourWebview=[[UIWebView alloc]init]; 
yourWebview.delegate=self; 
+1

Twierdzi, że delegat już jest ustawiony i działa. –

+0

@Thedude: Wiem o tym. Ale nie opublikował żadnego kodu. Więc mogę tylko zgadywać możliwości. A powyżej wydaje się najlepszą możliwą możliwością. –

1

Po kliknięciu wyszukiwania, tym navigationType jest UIWebViewNavigationTypeFormSubmitted. Tak więc w tym przypadku typem powrotu powinien być TAK. Jeśli tak nie jest, metoda webViewDidFinishLoad nie jest uruchamiana.

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType 
{ 
    NSLog(@"shouldStartLoadWithRequest"); 

    if (navigationType == UIWebViewNavigationTypeLinkClicked){ 
     NSLog(@"UIWebViewNavigationTypeLinkClicked"); 

     return YES; 
    } 
    if (navigationType ==UIWebViewNavigationTypeFormSubmitted) { 
     NSLog(@"UIWebViewNavigationTypeFormSubmitted"); 
     return YES; 
    } 
    if (navigationType ==UIWebViewNavigationTypeBackForward) { 
     NSLog(@"UIWebViewNavigationTypeBackForward"); 
     return YES; 
    } 
    if (navigationType ==UIWebViewNavigationTypeFormResubmitted) { 
     NSLog(@"UIWebViewNavigationTypeFormResubmitted"); 
     return YES; 
    } 
    if (navigationType ==UIWebViewNavigationTypeReload) { 
     NSLog(@"UIWebViewNavigationTypeReload"); 
     return YES; 
    } 



    return YES; 
} 
1

Ten problem zwykle występuje w aplikacjach na iPadzie .... ale możesz rozwiązać problem za pomocą [self performselector: afterdelay], musisz sprawdzić metodę selektora, czy przeglądarka załadowała czy nie [załadowano m_pWebview]; i zgodnie z tym wskaźnikiem wykonania zatrzymanie .... nie jest to właściwe rozwiązanie, ale działa .......