2011-08-09 15 views
9

no sé si se lo pidiera correctamente en la pregunta título, pero aquí voy a describir en breveUIWebView scrollTo debe comportarse sin problemas

Tengo una UIWebView y cargar el contenido en función de div y cada div tiene identificador único en loadRequest. Como si mi contenido fuera demasiado grande, así que se descompone en pedazos y cargando el contenido restante una vez que toca 'Leer más'

Este evento 'Leer más' se dispara en el desplazamiento automático que estoy manejando mediante javascript. así que una vez que se activa ese evento, simplemente anexa datos (para lo cual tengo otro método) usando window.location.href = div1 + div2 (es solo un ejemplo).

Ahora el principal problema es cuando scrollDown y wherver me sale el mensaje 'Leer más' y fuego automático A continuación, añade los datos a la div y el espectáculo actual (usuario se sienta su un seguir leyendo) pero cuando

Desplazamiento hacia arriba Se comporta como un elemento porque simplemente agrega los datos al elemento div y se desplaza hasta setScroll (ubicación actualizada);

ubicación actualizada se utiliza para cuando estamos agregando el contenido al div y debe desplazarse a la misma posición donde estaba el usuario.

por lo que vamos a empezar con un ejemplo, supongamos Actualmente estoy leyendo la div2 y cuando me desplazo hasta 'Leer más' eventos disparados y añadir a div1 div2 y luego vista web delegado shouldStartLoadWithRequest llamado.

así que cada vez que actualiza el contenido a div2 cuando se desplaza hacia arriba pero primero me lleva a la ubicación anterior de div1 y luego me lleva a la ubicación div2 donde estaba leyendo actualmente. por lo que se siente como realmente weired, de repente me lleva a algún lugar por un tiempo y me lleve a mi posición actual dentro de la fricción de la segunda

he intentado con esta solución, pensé para tomar la captura de pantalla y crear un imageView con esa imagen de captura de pantalla del UIWebView actual y poner en vista web cada vez que suceda el evento 'Leer más'. una vez que se haya terminado la carga de la vista web, elimine el imageView y visualice la vista web. pero esto está sucediendo de la misma manera, el problema es que todo está sucediendo bajo el delegado de la vista web. todavía no pude entender qué está pasando? La solución a este problema está en la pista correcta o hay alguna mejor solución para eso

+0

¿Cómo se carga el contenido cuando el usuario toca "leer más"? ¿Llamas a 'loadHtmlString'? Si lo hace, debería intentar pasar contenido nuevo a través de 'stringByEvaluatingJavaScriptFromString:' –

+0

No llamo utilizando el objeto loadRequest. y en webview delgate estoy comprobando if ([(NSString *) [componentes objectAtIndex: 1] isEqualToString: @ "readMore"]) {activityIndicatorView.hidden = TRUE; [activityIndicatorView stopAnimating];} –

Respuesta

0

Sospecho que el "salto" que experimentas depende del hecho de que la vista web está completamente redibujada (y todos sabemos que UIWebView es lento).

Por lo tanto, veo 2 opciones:

  1. poner en práctica el "Leer más" mecánica totalmente en javascript por medio de Ajax;

  2. lugar de carga de datos en la vista utilizando loadRequest, hacer una NSConnection a esa URL a continuación, actualice la vista web inyectando en ella el código HTML que obtuvo de NSConnection través stringByEvaluatingJavaScriptFromString.

La segunda opción es posiblemente más agradable, ya que se basa totalmente SDK, pero verá fácilmente que es mucho más compleja que la primera. Los dos funcionarán y estoy bastante seguro de que te darán el tipo de comportamiento sin problemas que buscas.

+0

lo siento por la respuesta tardía. 1 opción, como dije, ya estoy implementando a través de JavaScript, lo describí en mi pregunta. 2 opción, no hago ninguna solicitud a ningún servidor web, todos mis archivos html están en mi directorio de proyecto y cada vez que el usuario se desplaza y si está en medio de algo si esos botones "Leer más" aparecen mientras se desplaza, llame al método javascript y Anexar los datos y llamar a mi delegado de vista web shouldStartLoadWithRequest. mi javascript se inyecta en el archivo html. si mis comentarios no son claros para usted, hágamelo saber, sé que es realmente difícil de entender sin el código –

0

Si entiendo su pregunta correctamente, parece que está tratando de implementar su propio manejo del concepto de "desplazamiento infinito".

Puede valer la pena echarle un vistazo one of the many infinite scroll libraries que ya están disponibles. Si uno no se ajusta perfectamente a sus requisitos, puede encontrar la inspiración que necesita para solucionar el que tiene ahora.

+0

Su enlace está roto ... – Eric

1

Tengo una situación similar. Lo que hago es tener dos UIWebViews uno encima del otro. Cuando es hora de actualizar una vista, agarro la posición de desplazamiento, cargo los nuevos datos en el UIWebView oculto, cuando el otro UIWebView termina de cargar sus datos, establece su posición de desplazamiento en la posición de desplazamiento actual de la primera vista web, luego se oculta la primera vista web y se muestra solo. Es bastante transparente y funciona muy bien.

Cuestiones relacionadas