2009-03-01 10 views
41

¿Hay alguna manera fácil de desactivar UITextField en el código?¿Forma fácil de deshabilitar un UITextField?

Mi aplicación tiene 12 UITextField que están todas activadas de manera predeterminada, pero cuando se detecta un cambio en mi Control de segmento, quiero desactivar algunas de las UITextField dependiendo de qué segmento elija el usuario.

¿Solo falta saber cómo desactivarlo o hacerlo no editable?

Gracias

Respuesta

96

Prueba esto:

textField.enabled = NO; 
+0

lol, estaba seguro de que intenté esto todo listo, pero debo haber cometido un error tipográfico o algo así porque funciona ... es un salvavidas ... Gracias :) –

+6

Si alguna vez está tratando de averiguar * si * está habilitado, tenga en cuenta que getter es textField.isEnabled, no textField.enabled. – mk12

+0

La propiedad 'enabled' hereda la propiedad de UIControl. si NO, ignora los eventos táctiles. es un buen enfoque de trabajo. – Allen

27

Si también quiere indicar que el campo de texto está deshabilitada se debe añadir más código:

si se utiliza UITextBorderStyleRoundedRect, sólo se puede mostrar en gris texto:

textField.enabled = NO; 
textField.textColor = [UIColor lightGrayColor]; 

si usa cualquier otro estilo, usted ca n También en gris de fondo:

textField.enabled = NO; 
textField.backgroundColor = [UIColor lightGrayColor]; 
10

Este sería el más simple de todos, cuando usted múltiples campos de texto también:

en viewDidLoad (pon el delegado sólo para los campos de texto que no deben ser editables.

self.textfield.delegate=self; 

e insertar esta función delegada:

- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField{ 
return NO; 
} 

Eso es todo!

+1

¿Cómo es esto más simple que 'textField.enabled = NO', que ya fue publicado? No lo hice, porque es una solución alternativa legítima que podría ser más conveniente en un par de casos extremos (por ejemplo, si tienes algún objeto que es el delegado de montones de campos de texto diferentes, y cuáles están deshabilitados cambiando con frecuencia), pero para la mayoría de los escenarios definitivamente no es más simple que la respuesta aceptada. –

+0

Siempre puede verificar de esta manera: 'code' if (textfield == self.aTextField) {// verifique si ese es el campo de texto que desea deshabilitar return NO; else { –

+0

¡Esta es la mejor solución cuando tienes varios campos de texto! Gracias Ankish – FouZ

1

Categoría en UIView.

agrega los siguientes métodos en esa categoría.

-(void)disable { 
    self.alpha = 0.5; 
    self.userInteractionEnabled = FALSE; 
} 

-(void)enable { 
    self.alpha = 1.0; 
    self.userInteractionEnabled = TRUE; 
} 

entonces a llamar a

yourTextField.disable(); 

En realidad, puede utilizar esto en cualquier vista que desea.

Cuestiones relacionadas