Tengo unos UITextFields en una UITableView. El usuario debería poder insertar solo números y puntos. Para hacer esto, configuré el tipo de teclado en UIKeyboardTypeNumberPad y agregué un botón '.'- en la esquina inferior izquierda. Cada vez que se presiona el botón, se llama a una función. Esta función debe insertar un punto en la posición actual del cursor, pero este es el problema: UITextField no tiene una propiedad selectedRange, por lo que no puedo obtener la posición actual del cursor. ¿Alguien sabe cómo resolver este problema o hay alguna otra forma de hacerlo? Gracias.Insertar cadena en la posición del cursor de UITextField
Respuesta
¡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.
Actualización: Según el comentario de Jasarien a continuación, es una buena práctica guardar primero los contenidos del portapapeles y restaurarlos después. Para mayor comodidad, aquí está mi código:
// Get a reference to the system pasteboard
UIPasteboard* lPasteBoard = [UIPasteboard generalPasteboard];
// Save the current pasteboard contents so we can restore them later
NSArray* lPasteBoardItems = [lPasteBoard.items copy];
// Update the system pasteboard with my string
lPasteBoard.string = @"-";
// Paste the pasteboard contents at current cursor location
[myUIField paste:self];
// Restore original pasteboard contents
lPasteBoard.items = lPasteBoardItems;
[lPasteBoardItems release];
Lea el valor del campo de texto como una cadena cuando se presiona el botón. Edite la cadena y luego establezca el valor del campo en la nueva cadena.
Si usted está mirando para crear campos de texto que le permiten entrar en cifras decimales puedo sugerir que usted prefiere solucionar el punto decimal a una cierta precisión y permite al usuario introducir los números de la siguiente manera:
Asumiendo que su la precisión es de 2 puntos decimales:
start: value is 0.00
user enters 1: value is 0.01
user enters 2: value is 0.12
user enters 3: value is 1.23
user enters 4: value is 12.34
Ver What is the best way to enter numeric values with decimal points? para una solución similar para la moneda.
Es, de lejos, una solución más simple que la creación de un teclado personalizado y el tratamiento de todos los matices que presenta ese enfoque. Sin embargo, si necesita una precisión de longitud variable, entonces ese enfoque podría mejorarlo.
Gracias. Creo que esta es la mejor manera. – WetFish
Ahora hay un fantástico teclado de tipo teclado numérico que incluye un punto decimal, sin necesidad de configuración necesarios, excepto el establecimiento (no en IB, no es una opción todavía) los UITextField
's keyboardType
propiedad a UIKeyboardStyleDecimalPad
, así:
textField.keyboardType = UIKeyboardTypeDecimalPad;
Esto hace todo el materia de lujo que ha estado tratando de hacerlo automáticamente.
- (void)insertText:(NSString *)text
disponible en iOS 3.2 y versiones posteriores.
parece ser la respuesta adecuada para esta pregunta en este momento. – GoGreen
En Swift
Esto inserta texto en la posición actual del cursor.
textField.insertText("Hello")
Mi respuesta completa sobre el trabajo con la posición del cursor es here.
- 1. Posición del cursor de control en UITextField
- 2. cómo insertar texto en cualquier posición del cursor en uitextview?
- 3. Insertar cadena en la posición especificada
- 4. Cambiar el color del cursor en UITextField
- 5. Posición del cursor en la abreviatura VIM
- 6. EditTextPreference y la posición predeterminada del cursor
- 7. Cómo insertar un bloque de espacios en blanco comenzando en la posición del cursor en vi?
- 8. posición del cursor del mouse en Javascript?
- 9. Insertar texto después de la posición del cursor en el texto es
- 10. Obteniendo la posición del cursor en un Textarea
- 11. Cómo insertar una imagen en la posición del cursor en tinymce
- 12. Cómo obtener la posición del cursor
- 13. La posición del cursor cambió el evento
- 14. ¿Cómo encontrar la posición del cursor en una DIV contenteditable?
- 15. ¿Cuál es la mejor manera de establecer la posición del cursor/cursor?
- 16. Insertar texto en la posición del cursor a un CKEditor usando jQuery
- 17. Encontrar la posición del texto del cursor en JTextField
- 18. jQuery Establecer posición del mouse (no posición del cursor)
- 19. posición del cursor en un UITextView
- 20. Mover el cursor al comienzo de UITextField
- 21. Pegar cadena de múltiples líneas en gVim en la posición del cursor
- 22. Establecer la posición del cursor en un widget de texto
- 23. Cómo determinar la posición del cursor de texto en Windows
- 24. Encontrar la posición del cursor en un cuadro de texto
- 25. Obtener la posición del cursor en Android en Editar texto?
- 26. ¿Cómo obtengo la posición actual del cursor de la pantalla?
- 27. obtener la posición del cursor de la terminal
- 28. Cómo obtener la posición del cursor en un eclipse TextEditor
- 29. La posición del cursor está desactivada en JTextArea
- 30. Cómo obtener la posición del cursor en un Edittext
Esto es lo que realmente hizo la pregunta. Y, y excelente solución. – oberbaum
Esta es una gran solución. Sin embargo, puede valer la pena mencionar aquí que debe guardar los contenidos del portapapeles del usuario antes de poner sus contenidos en el portapapeles y luego restaurar los contenidos del usuario posteriormente. De esta forma, no tienen idea de que utilizaste el cartón y tu código es un buen ciudadano al no criticar el contenido de la mesa de trabajo del usuario. – Jasarien
Esta solución es incompatible con VoiceOver. En lugar de decir el carácter insertado, simplemente dice "Pegar". –