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Í.