Estoy haciendo un UITextField
que tiene un UIPickerView
as inputView
. Está todo bien, excepto que puedo editar copiando, pegando, cortando y seleccionando texto, y no lo quiero. Solo el selector debe modificar el campo de texto.
Aprendí que puedo deshabilitar la edición configurando setEnabled
o setUserInteractionEnabled
para NO
. Ok, pero TextField deja de responder al tacto y el selector no aparece.
¿Qué puedo hacer para lograrlo?
ios
uitextfield
uipickerview
Luiz de Prá
fuente
fuente
Traduce la respuesta de Nick a rápido:
P / S: Devuelve falso => los campos de texto no se pueden ingresar, editar con el teclado. Solo puede establecer texto por código.EX: textField.text = "My String Here"
fuente
Este sería el más simple de todos:
en viewDidLoad: (establezca el delegado solo para campos de texto que no deberían ser editables.
e inserte esta función de delegado:
¡Eso es!
fuente
UIPickerView
comportamiento de ese método delegado, funciona bien.En Swift 3+:
fuente
Sería más elegante crear una subclase personalizada
UITextField
que devuelvaNO
para todas las llamadas acanPerformAction:withSender:
(o al menos dondeaction
está@selector(cut)
o@selector(paste)
), como se describe aquí .Además, también implementaría - (BOOL) textField: (UITextField *) textField shouldChangeCharactersInRange: (NSRange) range replacementString: (NSString *) cadena según la sugerencia de Nick para deshabilitar la entrada de texto desde teclados Bluetooth.
fuente
canPerformAction
y de la subclaseshouldChangeCharactersInRange
nunca se llaman.Simplemente coloque un UIButton exactamente sobre todo el UITextField sin etiqueta-texto que lo haga "invisible". Este botón puede recibir y delegar toques en lugar del campo de texto y el contenido del campo de texto sigue siendo visible.
fuente
En Swift:
fuente
Usé la solución proporcionada por MrMage. Lo único que agregaría es que debe renunciar a UITextView como primer respondedor, de lo contrario, se quedará atascado con el texto seleccionado.
Aquí está mi código rápido:
fuente
Para una alternativa que maneja UIPickerView y Action Sheets, consulte ActionSheetPicker
https://github.com/TimCinel/ActionSheetPicker
Tiene cocoapods habilitados. Maneja todos los botones cancelar y listo en la hoja de acción. Los ejemplos dentro del proyecto de muestra son geniales. Elijo ActionSheetStringPicker, que maneja fácilmente solo las opciones basadas en cadenas, pero la API puede manejar casi cualquier cosa que se me ocurra.
Originalmente comencé una solución muy parecida a la respuesta marcada, pero tropecé con este proyecto y me tomó aproximadamente 20 minutos integrar las cosas en mi aplicación para su uso, incluido el uso de cocopods: ActionSheetPicker (~> 0.0)
Espero que esto ayude.
Descarga el proyecto git y mira las siguientes clases:
Aquí está aproximadamente la mayor parte del código que agregué, más las importaciones * .h.
fuente
Para evitar la edición de UITextField mientras usa UIPickerView para seleccionar valores (en Swift):
fuente
Esta solución funciona. Coloque una UIView transparente encima del campo de texto e implemente el siguiente código:
fuente
Haga que su inputView sea presentado por un campo de texto oculto que también cambie el texto del presentado y deshabilitado.
fuente
Solía :
y funciona bien
fuente
Esto funcionó para mí
[textview setEditable:NO];
Las respuestas anteriores complican demasiado la situación.fuente