Ajout du bouton «Effacer» à un iPhone UITextField


175

Comment ajouter ce petit bouton "X" sur le côté droit d'un UITextField qui efface le texte? Je ne trouve pas d'attribut pour ajouter ce sous-contrôle dans Interface Builder dans le SDK iPhone OS 2.2.

Remarque: dans Xcode 4.x et versions ultérieures (SDK iPhone 3.0 et versions ultérieures), vous pouvez le faire dans Interface Builder.

Réponses:


329

Ce bouton est une superposition intégrée fournie par la UITextFieldclasse, mais à partir du SDK iOS 2.2, il n'y a aucun moyen de le définir via Interface Builder. Vous devez l'activer par programme.

Ajoutez cette ligne de code quelque part ( viewDidLoadpar exemple):

Objectif c

myUITextField.clearButtonMode = UITextFieldViewModeWhileEditing;

Swift 5.0

myUITextField.clearButtonMode = .whileEditing

61

Vous pouvez également définir cela directement à partir d'Interface Builder sous l'inspecteur d'attributs.

entrez la description de l'image ici

Tiré de XCode 5.1


1
Notez que la question porte spécifiquement sur le SDK 2.2 et note que cette option est disponible dans Interface Builder dans les versions ultérieures.
Kristopher Johnson

47

Swift 4+:

textField.clearButtonMode = UITextField.ViewMode.whileEditing

ou même plus court:

textField.clearButtonMode = .whileEditing

Correction du type d'énumération. Ne doit pas commencer par une majuscule.
T.Pasichnyk

35

vous pouvez ajouter un bouton d'effacement personnalisé et contrôler la taille et tout en utilisant ceci:

UIButton *clearButton = [UIButton buttonWithType:UIButtonTypeCustom];
[clearButton setImage:img forState:UIControlStateNormal];
[clearButton setFrame:frame];
[clearButton addTarget:self action:@selector(clearTextField:) forControlEvents:UIControlEventTouchUpInside];

textField.rightViewMode = UITextFieldViewModeAlways; //can be changed to UITextFieldViewModeNever,    UITextFieldViewModeWhileEditing,   UITextFieldViewModeUnlessEditing
[textField setRightView:clearButton];

7

Objectif c :

self.txtUserNameTextfield.myUITextField.clearButtonMode = UITextFieldViewModeWhileEditing;

Rapide :

txtUserNameTextfield.clearButtonMode = UITextField.ViewMode.WhileEditing;

6

Swift 4 (adapté de la réponse de Kristopher Johnson)

textfield.clearButtonMode = .always

textfield.clearButtonMode = .whileEditing

textfield.clearButtonMode = .unlessEditing

textfield.clearButtonMode = .never

6

ça ne marche pas, fais comme moi:

rapide:

customTextField.clearButtonMode = UITextField.ViewMode.Always

customTextField.clearsOnBeginEditing = true;

func textFieldShouldClear(textField: UITextField) -> Bool {
    return true
}

6

Sur Xcode 8 (8A218a):

Rapide:

textField.clearButtonMode = UITextField.ViewMode.whileEditing;

Le «W» est passé du capital au «w» sans plafond.


0
  func clear_btn(box_is : UITextField){
    box_is.clearButtonMode = .always
    if let clearButton = box_is.value(forKey: "_clearButton") as? UIButton {
        let templateImage =  clearButton.imageView?.image?.withRenderingMode(.alwaysTemplate)

        clearButton.setImage(templateImage, for: .normal)
        clearButton.setImage(templateImage, for: .highlighted)

        clearButton.tintColor = .white

     }
}

-4

Sur Xcode version 8.1 (8B62), cela peut être fait directement dans l'inspecteur d'attributs. Sélectionnez le champ textField, puis choisissez l'option appropriée dans la liste déroulante Effacer le bouton, située dans l'inspecteur d'attributs.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.