2012-03-06 11 views
5

Prosta koncepcja, jednak nie działa. Mam dwa przyciski w moim UIWebView, przycisk Wstecz i przycisk przewijania do przodu. Przyciski z tyłu wywołają [self.webView goBack] i przesyłają dalej [self.webView goForward].iOS - problemy z canGoForward i canGoBack w webViewDidStartLoad

Teraz chcę wiedzieć w zasadzie, czy UIWebView może wrócić. Jeśli tak, włącz przycisk Wstecz i pozwól mu wrócić i tak samo dla przycisku Dalej.

-(void)webViewDidStartLoad:(UIWebView *)webView 
{  
    if([self.webView canGoForward]) { 
     [forwardArrowBtn setEnabled:YES]; 
    } else { 
     [forwardArrowBtn setEnabled:NO]; 
    } 

    if([self.webView canGoBack]) { 
     [backArrowBtn setEnabled:YES]; 
    } else { 
     [backArrowBtn setEnabled:NO]; 
    } 
} 

Problem polega na tym, że to nie działa przy pierwszym załadowaniu. Na przykład: kliknę link w obrębie UIWebView, przechodzi do strony, ale przycisk Wstecz jest nadal wyłączony i nie można go kliknąć. Dopóki nie kliknę innego linku, przycisk Wstecz będzie włączony i zacznie działać.

Dlaczego to nie działa przy pierwszym przejściu na inną stronę i działa tylko po raz drugi?

Odpowiedz

12

Rozwiązałem ten problem, umieszczając kod ustawienia przycisku nie tylko w webViewDidStartLoad. Napisz metodę i wywołaj ją z webViewDidStartLoad, webViewDidFinishLoad i shouldStartLoadWithRequest. Działa bezbłędnie dzięki mojej aplikacji.

+0

Czy to praca dla bardziej prostego rozwiązania? To działa jednak ... – Romes

+0

Czy możesz pokazać ... lub wyjaśnić lepiej ...? – Morkrom

+0

'webViewDidFinishLoad:' jest właściwym miejscem do sprawdzenia. Problem wydaje się być błędem w WebKit. Aby uzyskać szczegółowe wyjaśnienie, zobacz [http://stackoverflow.com/questions/18948373/why-is-uiwebview-cangoback-no-in-ios7 to pytanie i odpowiedź] – Olie

3

Czy twoja pierwsza strona jest faktyczną lokalizacją lub plikiem na twoim urządzeniu? Mam ten problem, gdy zaczynam od loadHTMLString, prawdopodobnie dlatego, że naprawdę nie ma nic, do czego można by wrócić (zakładam, że interfejs nie buforuje zawartości strony, tylko odwołanie do strony). Kiedy pracuję z loadRequest, działa dobrze. To powiedziawszy, musisz zrobić tak, jak stwierdził Aemsn. Dobry samouczek można znaleźć pod adresem this link.

1

Doszedłszy tutaj robiąc losową wyszukiwarkę internetową, aby odpowiedzieć na „bazy” pytanie, dlaczego to działa tylko po raz drugi:

webViewDidStartLoad jest wywoływana przed faktycznie załadować kolejną stronę. Dla tego, co robisz, webViewDidFinishLoad ma więcej sensu. Więc kiedy robisz pierwszy ładunek, nie możesz wrócić (nic załadowane do przodu lub do tyłu). Gdy zmieniasz strony za pierwszym razem, nadal nie możesz - załadowana jest tylko jedna strona (aktualna). Tak więc drugi raz jest, gdy wydaje się działać.

0

Miałem ten sam dokładny problem i właśnie to rozgryzłem. Zakładam, że nie użyłeś selektora webView:loadRequest: do załadowania zawartości strony? Zamiast tego prawdopodobnie użyłeś selektora webView:loadData:MIMEType:textEncodingName:baseURL: lub .

Dokładnie to zrobiłem. Jeśli użyjesz selektora webView:loadRequest:, zadziała - przynajmniej dla mnie.

Powiązane problemy