Tengo un UITextField
que estoy forzando a formatear modificando el texto dentro del controlador de notificación de cambios. Esto funciona muy bien (una vez que resolví los problemas de reentrada) pero me deja con un problema más persistente. Si el usuario mueve el cursor a otro lugar que no sea el final de la cadena, mi cambio de formato lo mueve al final de la cadena. Esto significa que los usuarios no pueden insertar más de un carácter a la vez en el medio del campo de texto. ¿Hay alguna manera de recordar y restablecer la posición del cursor en el UITextField
?Posición del cursor de control en UITextField
Respuesta
No creo que haya una manera de colocar el cursor en un lugar en particular en su UITextField
(a menos que sea muy complicado y simule un evento táctil). En cambio, manejaría el formateo cuando el usuario tenga terminado editando su texto (en textFieldShouldEndEditing:
) y si su entrada es incorrecta, no permita que el campo de texto termine de editarse.
Lo había considerado pero lo que estoy implementando es similar a la forma en que ingresas los números en un cajero automático. El decimal siempre está allí y mientras tecleas los números, se mueven hacia la izquierda, por lo que ingresar 1-0-5-0 resulta primero en 0.01, luego en 0.10, 1.05, 10.50. Hacerlo al final permitiría 1050 en el campo y luego cambiarlo a 10.50, lo cual es bastante confuso para el usuario. – Jeremy
¡Finalmente he encontrado una solución para este problema! Se puede poner el texto que necesita insertado en la mesa de trabajo del sistema y luego pegarlo en la posición actual del cursor:
[myTextField paste:self]
he encontrado la solución en el blog de esta persona:
http://dev.ragfield.com/2009/09/insert-text-at-current-cursor-location.html
La funcionalidad de pasta es OS V3.0 específico, pero lo he probado y funciona bien para mí con un teclado personalizado.
Si elige esta solución, probablemente debería guardar los contenidos existentes del portapapeles del usuario y restaurarlos inmediatamente después.
Controlar la posición del cursor en un UITextField es complicado porque se involucran tantas abstracciones con los cuadros de entrada y las posiciones de cálculo. Sin embargo, es ciertamente posible. Puede utilizar la función miembro setSelectedTextRange
:
[input setSelectedTextRange:[input textRangeFromPosition:start toPosition:end]];
Aquí es una función que toma un rango y selecciona los textos en ese rango. Si lo que desea es colocar el cursor en un determinado índice, sólo tiene que utilizar una gama de longitud 0:
+ (void)selectTextForInput:(UITextField *)input atRange:(NSRange)range {
UITextPosition *start = [input positionFromPosition:[input beginningOfDocument]
offset:range.location];
UITextPosition *end = [input positionFromPosition:start
offset:range.length];
[input setSelectedTextRange:[input textRangeFromPosition:start toPosition:end]];
}
Por ejemplo, para colocar el cursor en idx
en el UITextField input
:
[Helpers selectTextForInput:input
atRange:NSMakeRange(idx, 0)];
Bien hecho. esto funciona para mí y es flexible. – LostInTheTrees
La idea general está bien, pero este código quiere residir en una categoría en NSTextField, como aquí: https://github.com/MaxZeng/UITextField-SelectedRange/blob/master/UITextFieldSelectedRange/UITextField%2BSelection.m – osxdirk
Lo siento pero no funciona, el cursor se queda al final ... iOS 8.0 aquí. –
Aquí es un fragmento de código que funciona bien para este problema:
- (void)textFieldDidBeginEditing:(UITextField *)textField{
UITextPosition *positionBeginning = [textField beginningOfDocument];
UITextRange *textRange =[textField textRangeFromPosition:positionBeginning
toPosition:positionBeginning];
[textField setSelectedTextRange:textRange];
}
Aquí está la versión Swift de @Chris R.- actualizado para Swift3
private func selectTextForInput(input: UITextField, range: NSRange) {
let start: UITextPosition = input.position(from: input.beginningOfDocument, offset: range.location)!
let end: UITextPosition = input.position(from: start, offset: range.length)!
input.selectedTextRange = input.textRange(from: start, to: end)
}
dude en utilizar esta categoría UITextField
para obtener y establecer la posición del cursor:
@interface UITextField (CursorPosition)
@property (nonatomic) NSInteger cursorPosition;
@end
-
@implementation UITextField (CursorPosition)
- (NSInteger)cursorPosition
{
UITextRange *selectedRange = self.selectedTextRange;
UITextPosition *textPosition = selectedRange.start;
return [self offsetFromPosition:self.beginningOfDocument toPosition:textPosition];
}
- (void)setCursorPosition:(NSInteger)position
{
UITextPosition *textPosition = [self positionFromPosition:self.beginningOfDocument offset:position];
[self setSelectedTextRange:[self textRangeFromPosition:textPosition toPosition:textPosition]];
}
@end
Útil a la posición en el índice (Swift 3)
private func setCursorPosition(input: UITextField, position: Int) {
let position = input.position(from: input.beginningOfDocument, offset: position)!
input.selectedTextRange = input.textRange(from: position, to: position)
}
- 1. Insertar cadena en la posición del cursor de UITextField
- 2. Cambiar el color del cursor en UITextField
- 3. Obtener la posición del cursor con respecto al control - C#
- 4. posición del cursor del mouse en Javascript?
- 5. Windows Forms Posición del cursor RichTextBox
- 6. jQuery Establecer posición del mouse (no posición del cursor)
- 7. Posición del cursor en la abreviatura VIM
- 8. posición del cursor en un UITextView
- 9. Mover el cursor al comienzo de UITextField
- 10. Cómo obtener la posición del cursor
- 11. La posición del cursor cambió el evento
- 12. EditTextPreference y la posición predeterminada del cursor
- 13. Encontrar la posición del texto del cursor en JTextField
- 14. IPhone UITextField no muestra editar cursor o borrar texto de marcador de posición cuando se toca
- 15. Establecer la posición del cursor en un widget de texto
- 16. Cómo determinar la posición del cursor de texto en Windows
- 17. Encontrar la posición del cursor en un cuadro de texto
- 18. cómo insertar texto en cualquier posición del cursor en uitextview?
- 19. Obtener la posición del cursor en Android en Editar texto?
- 20. JFormattedTextField posición de cursor en el foco
- 21. Obteniendo la posición del cursor en un Textarea
- 22. Cómo obtener la posición del cursor en un eclipse TextEditor
- 23. La posición del cursor está desactivada en JTextArea
- 24. Cómo obtener la posición del cursor en un Edittext
- 25. jquery Establecer la posición del cursor en contenteditable div
- 26. ¿Cómo obtener la posición del cursor en bash?
- 27. ¿Cómo encontrar la posición del cursor en una DIV contenteditable?
- 28. Cómo encontrar la posición del cursor en un JTextArea
- 29. Cómo establecer la posición del cursor en UITextView
- 30. VIM: Añadir espacios en la posición del cursor
Respuesta rápida sobre cómo obtener y establecer la posición del cursor e insertar texto. http://stackoverflow.com/a/34922332/3681880 – Suragch