iOS - Probleme mit canGoForward und canGoBack in webViewDidStartLoad
Einfaches Konzept, aber es funktioniert nicht. Ich habe zwei buttons in meinem UIWebView
, eine zurück-Taste und vorwärts-Taste. Zurück-buttons ruft [self.webView goBack] und vorwärts [self.webView goForward].
Ich will jetzt wissen, im Grunde, wenn die UIWebView
zurück gehen können. Wenn ja, dann aktivieren Sie die Schaltfläche zurück, und lass es zurück gehen, und das gleiche gilt für die vorwärts-Taste.
-(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 ist das funktioniert nicht auf der ersten laden. Zum Beispiel: ich klicke auf einen link in der UIWebView
geht es auf die Seite, aber die Schaltfläche "zurück" ist immer noch deaktiviert und nicht anklickbar. Nicht, bis ich auf einen anderen link, wird die zurück-Schaltfläche, zeigen Sie aktiviert und beginnt zu arbeiten.
Wie kommt es, das funktioniert nicht, das erste mal, wenn Sie gehen zu einer anderen Seite, und funktioniert nur das zweite mal?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich löste dieses Problem, indem Sie die Taste Einstellung wird nicht nur in webViewDidStartLoad. Schreiben Sie eine Methode und rufen Sie es von webViewDidStartLoad, webViewDidFinishLoad und shouldStartLoadWithRequest. Funktioniert einwandfrei mit meiner app.
webViewDidFinishLoad:
ist der richtige Ort für die Prüfung. Das problem scheint ein bug in WebKit. Für eine ausführliche Erklärung siehe [stackoverflow.com/questions/18948373/... dieses, SO Frage & Antwort]Ist die erste Seite eine tatsächliche web-Speicherort oder eine Datei auf Ihrem Gerät? Ich habe dieses Problem wenn ich anfange mit loadHTMLString, vermutlich, weil es nicht wirklich etwas, um wieder zu gehen (ich gehe davon aus, dass die UI nicht cache den Inhalt der Seite, nur der Verweis auf die Seite). Wenn ich arbeiten bin mit einem loadRequest, es funktioniert gut. Das heißt, Sie brauchen, um zu tun, wie Aemsn angegeben. Ein gutes tutorial finden Sie unter dieser link.
Kommen hier während einer zufälligen web-Suche, um Antworten auf die 'Basis' Frage, warum es nur funktioniert das zweite mal:
webViewDidStartLoad aufgerufen wird vor Sie eigentlich laden der nächsten Seite. Für das, was du tust, webViewDidFinishLoad mehr Sinn macht. Also, wenn Sie Ihren ersten laden, Sie können nicht zurück gehen (nichts geladen für vorwärts-oder zurück). Beim ändern von Seiten das erste mal, Sie kann immer noch nicht-nur eine Seite (current) geladen wird. So, die zweite Zeit an ist, wenn es zu funktionieren scheint.
Ich habe exakt das gleiche problem, und ich gerade herausgefunden. Ich nehme an, Sie hat nicht verwendet die
webView:loadRequest:
Auswahl, um die Last der webcontent? Stattdessen werden Sie wahrscheinlich verwendet, diewebView:loadData:MIMEType:textEncodingName:baseURL:
oder dieloadHTMLString:baseURL:
selector.Das ist genau das, was ich getan habe. Wenn Sie die
webView:loadRequest:
- Selektor statt, es wird funktionieren - zumindest kam es für mich.