Obteniendo la posición del cursor en un UITextView en el iPhone?
(4)
Tenemos una UITextView en nuestra aplicación para iPhone que es editable. Necesitamos insertar texto en la ubicación del cursor cuando los usuarios presionan algunos botones de la barra de herramientas, pero parece que no pueden encontrar un método documentado (o no documentado) para encontrar la ubicación actual del cursor.
¿Alguien tiene alguna idea o alguien más ha logrado algo similar?
¿Has probado UITextView.selectedRange
? Devuelve un NSRange
, cuyo elemento de ubicación debería indicarle, dónde está el cursor.
Use la propiedad UITextView selectedRange
para encontrar el punto de inserción cuando la vista de texto es el primer respondedor. De lo contrario, cuando la vista no está enfocada, esta propiedad devuelve NSNotFound
. Si necesita conocer la posición del cursor en ese caso, considere subclasificar UITextView
y anular el método canResignFirstResponder
, donde puede almacenar la posición del cursor en una variable miembro.
Swift 4 :
// lets be safe, thus if-let
if let cursorPosition = textView.selectedTextRange?.start {
// cursorPosition is a UITextPosition object describing position in the text
// if you want to know its position in textView in points:
let caretPositionRect = textView.caretRect(for: cursorPosition)
}
Simplemente usamos textView.selectedTextRange
para obtener el rango de texto seleccionado y la posición del cursor está en su posición start
.
Como dijo drewh, puede utilizar el rango seleccionado de UITextView para devolver el punto de inserción. La longitud de este rango es siempre cero. El siguiente ejemplo muestra cómo hacerlo.
NSString *contentsToAdd = @"some string";
NSRange cursorPosition = [tf selectedRange];
NSMutableString *tfContent = [[NSMutableString alloc] initWithString:[tf text]];
[tfContent insertString:contentsToAdd atIndex:cursorPosition.location];
[theTextField setText:tfContent];
[tfContent release];