2009-08-27 19 views
10

Me gustaría hacer algún tipo de actualización de una UITextView para establecer la vista de texto en su estado original. Tengo un párrafo que se llena dinámicamente según en qué TableViewCell haga clic el usuario. Entonces, cuando se desplazan por el campo de texto, luego regresan y seleccionan otra celda y regresan, el texto cambia, pero la posición de desplazamiento permanece cuando el usuario la dejó. ¿Cómo puedo devolverlo a su estado predeterminado? ¡Gracias!Actualice la posición de desplazamiento de UITextView en el iPhone

+0

Como nota, he estado tratando de utilizar [myTextView scrollRangeToVisible: NSMakeRange ([longitud myTextView.text], 0)]; –

Respuesta

27

Por estado predeterminado, ¿quiere decir que se desplazó hacia la parte superior? Si es así, estás en el camino correcto. Trate

[myTextView scrollRangeToVisible:NSMakeRange(0, 0)]; 
+1

Lo intenté también, pero no pareció ir al verdadero nivel del texto. Solo llega cerca de la parte superior, pero no se ve como el predeterminado. Honestamente, no entiendo muy bien las cosas de NSRange. –

+0

Acabo de probar esto con una aplicación que tengo, y funciona para mí. ¿Puedes publicar una captura de pantalla de tu simulador para que podamos ver el comportamiento? –

+0

Aquí hay algunas capturas de pantalla: INICIAL, DESPLAZADO MANUALMENTE Y VOLVICADO http://www.angelfilm.net/external/stackoverflow/mos/ –

8

He descubierto que si puedo borrar la UITextView primero y luego aplicar el nuevo texto, se genera automáticamente un "scroll" de nuevo a la parte superior.

myTextView.text = @""; 
myTextView.text = theRealTextContent; 
1

Ninguno de estos enfoques funcionó satisfactoriamente para mí.

  • scrollRangeToVisible produce toneladas de artefactos visuales (un montón de desplazamiento cuando se cambia entre las grandes cadenas), y de hecho sólo funciona en absoluto en una llamada retardada se ha cambiado algún tiempo (utilicé 0,1 segundos) después de que los contenidos, no directamente como lo implica la respuesta de Shaggy Frog.

  • configurando el texto en @ "" antes de configurar los nuevos contenidos no ayuda, incluso con un retraso.

Parece como si una vez al UITextView se ha escrito, que siempre está en este modo en el establecimiento de nuevos contenidos provoca artefactos molestos desplazamiento. Intenté configurar selectionRange al comienzo de UITextView también, pero eso no ayudó. Enviar el mensaje resignFirstResponder antes de establecer los nuevos contenidos tampoco ayudó.

Debido a esto, decidí eliminar y volver a crear el UITextView cada vez que cambio los contenidos. Ese es un evento bastante raro (basado en la interacción humana) en mi aplicación que no es un problema de rendimiento. Era la única forma que podía encontrar para "cargar nuevos contenidos" en el UITextView sin toneladas de molestos artefactos de desplazamiento.

Mi experiencia es con OS3.2 (simulador de iPad)

5
[textview setScrollEnabled:YES]; 
textview.text = yourText; 
[textview setScrollEnabled:NO]; 
+0

. Realmente quería detener el desplazamiento de textView al actualizar el contenido , así que lo hice al revés y funciona sin problemas. Gracias. – soemarko

1

me las arreglé para obtener el resultado deseado - obligando al UITextView a 'scroll' a la parte superior de su contenido al editar extremos. Pero para lograrlo, TENGO que desactivar tanto el desplazamiento en textViewDidEndEditing Y TAMBIÉN restablecer el texto en el mismo método.

Habilizo de nuevo el desplazamiento en textViewDidBeginEditing.

- (void) textViewDidEndEditing: textView; 
{ 
    [textView setScrollEnabled: NO]; 
    NSString* savedText = [textView text]; 
    [textView setText:@""]; 
    [textView setText: savedText]; 
} 
6

Esto funciona si lo desea para desplazarse hasta la parte superior:

[theTextView scrollRangeToVisible:NSMakeRange(0, 0)]; 

El único problema es que esta anima su camino hacia arriba. Si usted quiere que se ajuste a la parte superior, utilice esto:

[theTextView scrollRectToVisible:CGRectMake(0, 0, 1, 1) animated:NO]; 
+0

Esta solución funcionó para mí. Cargué texto en viewDidLoad, cambié el ContentInset de UITextView y luego tuve que usar el scrollRectToVisible para alinearlo correctamente. Gracias – TMilligan

0

Lo que finalmente funcionó para mí lo que para borrar el contenido del texto y luego otra vez con el texto deseado en el siguiente bucle de ejecución.

// clear the text view 
self.textView.text = "" 

// set the text on the next run loop 
dispatch_async(dispatch_get_main_queue()) { 
    self.textView.text = someText 
} 
Cuestiones relacionadas