2009-03-01 16 views
41

C'è un modo semplice per disabilitare un UITextField nel codice?Un modo semplice per disabilitare un UITextField?

mia app ha 12 UITextField che sono tutti attivata per impostazione predefinita, ma quando viene rilevato un cambiamento nel mio controllo Segmento voglio disabilitare alcuni dei UITextField seconda di cosa Segmento le scelte degli utenti.

Basta sapere come disattivarlo o renderlo non modificabile?

Grazie

risposta

96

Prova questo:

textField.enabled = NO; 
+0

lol, ero sicuro di aver provato questo tutto pronto, ma devo aver fatto un refuso o qualcosa del genere perché funziona .. il tuo un salvagente ... Grazie :) –

+6

Se mai stai cercando di scoprire * se * è abilitato, tenere presente che getter è textField.isEnabled, non textField.enabled. – mk12

+0

La proprietà 'enabled' eredita la proprietà di UIControl. se NO, ignora gli eventi di tocco. è un buon approccio all'approccio. – Allen

27

Se si desidera anche indicare che il campo di testo è disabilitato si dovrebbe aggiungere altro codice:

se si utilizza UITextBorderStyleRoundedRect, si può solo in grigio testo:

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

se si utilizza qualsiasi altro stile, si ca n anche in grigio sfondo:

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

Questo sarebbe il più semplice di tutti, quando si multipli textfields anche:

in viewDidLoad: (impostato il delegato solo per i campi di testo che non dovrebbe essere modificabile.

self.textfield.delegate=self; 

e inserire questa funzione delegato:

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

questo è tutto!

+1

Com'è più semplice di 'textField.enabled = NO', che è già stato pubblicato? Non l'ho fatto, perché è una soluzione alternativa legittima che potrebbe essere più comoda in un paio di casi limite (ad esempio se hai qualche oggetto che è il delegato di un sacco di campi di testo diversi e quali sono disabilitati è cambiando frequentemente), ma per la maggior parte degli scenari non è sicuramente più semplice della risposta accettata. –

+0

Puoi sempre controllare in questo modo: 'code' if (textfield == self.aTextField) {// controlla se questo è il campo di testo che vuoi disabilitare return NO; else { –

+0

Questa è la soluzione migliore quando si dispone di più campi di testo! Grazie Ankish – FouZ

1

Crea categoria su UIView.

aggiungere i seguenti metodi in quella categoria.

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

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

poi basta chiamare

yourTextField.disable(); 

In realtà, è possibile utilizzare questo in ogni caso che si desidera.

Problemi correlati