2012-03-06 4 views
5

Concepto simple, sin embargo, no funciona. Tengo dos botones en mi UIWebView, un botón de retroceso y un botón de avance. El botón Atrás llama a [self.webView goBack] y reenviar [self.webView goForward].iOS: problemas con canGoForward y canGoBack en webViewDidStartLoad

Ahora quiero saber básicamente si el UIWebView puede volver atrás. Si es así, habilite el botón Atrás, y déjelo retroceder, y lo mismo para el botón de reenvío.

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

Problema es que esto no funciona en la primera carga. Por ejemplo: hago clic en un enlace dentro del UIWebView, va a la página, pero el botón Atrás aún está desactivado y no se puede hacer clic. No hasta que haga clic en otro enlace, el botón Atrás se mostrará habilitado y comenzará a funcionar.

¿Cómo es que esto no funciona la primera vez que vas a una página diferente, y solo funciona la segunda vez?

Respuesta

12

He resuelto este problema al poner el código de configuración del botón no solo en webViewDidStartLoad. Escriba un método y llámelo desde webViewDidStartLoad, webViewDidFinishLoad y shouldStartLoadWithRequest. Funciona perfectamente con mi aplicación.

+0

¿Es esto una solución para una solución más simple? Sin embargo funciona ... – Romes

+0

¿Puedes mostrar ... o explicar mejor ...? – Morkrom

+0

'webViewDidFinishLoad:' es el lugar correcto para el control. El problema parece ser un error en WebKit. Para obtener una explicación detallada, consulte [http://stackoverflow.com/questions/18948373/why-is-uiwebview- cangoback-no-in-ios7 this SO question & answer] – Olie

3

¿Su primera página es una ubicación web real o un archivo en su dispositivo? Tengo este problema cuando empiezo con loadHTMLString, presumiblemente porque realmente no hay nada a lo que regresar (supongo que la interfaz de usuario no almacena en caché el contenido de la página, solo la referencia a la página). Cuando estoy trabajando con loadRequest, funciona bien. Dicho eso, necesitas hacer lo que Aemsn dijo. Un buen tutorial se puede encontrar en this link.

1

Al venir aquí mientras se hace una búsqueda en la web al azar, para responder a la pregunta 'base' de la razón por la que sólo funciona la segunda vez:

webViewDidStartLoad se llama antes de que realmente se carga la página siguiente. Por lo que estás haciendo, webViewDidFinishLoad tiene más sentido. Entonces, cuando haces tu primera carga, no puedes regresar (nada cargado para adelante o atrás). Cuando cambia de página la primera vez, todavía no puede: solo se carga una página (actual). Por lo tanto, la segunda vez en adelante es cuando parece funcionar.

0

He tenido el mismo problema exacto y lo descubrí. Supongo que no utilizó el selector webView:loadRequest: para cargar el contenido web? En su lugar, probablemente utilizó el selector webView:loadData:MIMEType:textEncodingName:baseURL: o loadHTMLString:baseURL:.

Eso es exactamente lo que hice. Si usa el selector webView:loadRequest:, funcionará, al menos lo hizo para mí.

Cuestiones relacionadas