web-dev-qa-db-fra.com

Un moyen facile de désactiver un UITextField?

Existe-t-il un moyen simple de désactiver un UITextField dans le code?

Mon application dispose de 12 UITextField qui sont tous activés par défaut, mais lorsqu'une modification est détectée dans mon contrôle de segment, je souhaite désactiver une partie de UITextField en fonction du segment choisi par l'utilisateur.

Vous avez juste besoin de savoir comment le désactiver ou le rendre non modifiable?

Merci

43
CC.

Dans l'objectif-C:

textField.enabled = NO;

Dans Swift:

textField.isEnabled = false

Référence: IControl.isEnabled

105
Joel Levin

Si vous souhaitez également indiquer que le champ de texte est désactivé, vous devez ajouter plus de code:

si vous utilisez UITextBorderStyleRoundedRect, vous pouvez uniquement griser le texte:

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

si vous utilisez un autre style, vous pouvez également griser l'arrière-plan:

textField.enabled = NO;
textField.backgroundColor = [UIColor lightGrayColor];
29
Mariana B.

Ce serait le plus simple de tous, lorsque vous avez également plusieurs champs de texte:

dans viewDidLoad: (définissez le délégué uniquement pour les champs de texte qui ne doivent pas être modifiables.

self.textfield.delegate=self;

et insérez cette fonction déléguée:

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

C'est ça!

11
Ankish Jain

Faire une catégorie sur UIView.

ajoutez les méthodes suivantes dans cette catégorie.

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

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

alors il suffit d'appeler

yourTextField.disable();

En fait, vous pouvez l'utiliser sur n'importe quelle vue de votre choix.

1
Bhavesh