ios objective-c iphone uitextview

ios - Cómo establecer la posición del cursor en UITextView



objective-c iphone (6)

Cambia el rango selectedRange de tu textView. por ejemplo para colocar el cursor en la posición 3:

[textView setSelectedRange:NSMakeRange(3, 0)];

En su caso, agregar algunos espacios en el contenido de textView puede ayudar. y el textview ''s textDidChanged event observador textview ''s textDidChanged event para evitar que este espacio sea eliminado por el usuario.

Tengo un UITextView en mi aplicación de iPhone que es editable.

Se crea un nuevo botón dentro de UITextView cada vez que el usuario selecciona una función específica.

Como el botón siempre se coloca en el lado izquierdo de la vista de texto, debo colocar el cursor en el lado derecho del botón para que el usuario pueda ver lo que está escribiendo. Parece que no puedo encontrar un método documentado (o no documentado) para establecer la ubicación del cursor.

¿Alguien tiene alguna idea o alguien más ha logrado algo similar?


Intenta algo como esto:

dispatch_async(dispatch_get_main_queue(), ^{ inView.selectedRange = NSMakeRange(3, 0); });

Esto hará que se seleccione selectedRange en el subproceso principal al comienzo del próximo runloop.


Sé que es muy tarde, pero pensé que podría ayudar a las personas atrapadas en esto (como yo).

El performSelector:withObject:afterDelay parece funcionar bien (las otras respuestas simplemente no funcionarían por alguna extraña razón):

- (void)textViewDidBeginEditing:(UITextView *)inView { [self performSelector:@selector(setCursorToBeginning:) withObject:inView afterDelay:0.01]; } - (void)setCursorToBeginning:(UITextView *)inView { //you can change first parameter in NSMakeRange to wherever you want the cursor to move inView.selectedRange = NSMakeRange(3, 0); }

fuente: http://puppenspieler.tumblr.com/post/757819650/set-selectedrange-in-a-uitextview


Si quieres hacer un marcador de posición de Texview es obligatorio o opcional como yo. Ver mi hack

func textViewDidBeginEditing(textView: UITextView) { if textView.text.isEmpty { if self.text == "Required" || self.text == "Optional" { dispatch_async(dispatch_get_main_queue(), { textView.selectedRange = NSMakeRange(0, 0) }); } } } func textViewDidEndEditing(textView: UITextView) { if CommonUtils.isEmptyString(textView.text) { if required { textView.text = "Required" } else { textView.text = "Optional" } textView.textColor = grayColor// } } func textViewDidChange(textView: UITextView) { if textView.text.isEmpty { if required { textView.text = "Required" } else { textView.text = "Optional" } textView.textColor = grayColor textView.selectedRange = NSMakeRange(0, 0) } else { if required { if textView.text.length > "Required".length { textView.text = self.text.replace("Required", withString: "") } } else { if textView.text.length > "Optional".length { textView.text = self.text.replace("Optional", withString: "") } } textView.textColor = blackColor// } }

No olvides registrar delegado: UITextViewDelegate


Uso lo siguiente para llegar al principio de textView, utilizando Swift 4 :

DispatchQueue.main.async { self.selectedTextRange = self.textRange(from: self.beginningOfDocument, to: self.beginningOfDocument) }


textView.editable = YES; textView.selectedRange = NSMakeRange(2, 0);

Establezca el rango de selección seleccionado en una ubicación con una longitud de 0 y probablemente también desee que el textView sea editable, así que también establezca eso en SÍ.