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.

Kristopher Johnson
la source

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
Kristopher Johnson
la source
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

Nicolas Harlen
la source
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
Esqarrouth
la source
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];
Hossam Ghareeb
la source
7

Objectif c :

self.txtUserNameTextfield.myUITextField.clearButtonMode = UITextFieldViewModeWhileEditing;

Rapide :

txtUserNameTextfield.clearButtonMode = UITextField.ViewMode.WhileEditing;
PT Vyas
la source
6

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

textfield.clearButtonMode = .always

textfield.clearButtonMode = .whileEditing

textfield.clearButtonMode = .unlessEditing

textfield.clearButtonMode = .never
Edouard Barbier
la source
6

ça ne marche pas, fais comme moi:

rapide:

customTextField.clearButtonMode = UITextField.ViewMode.Always

customTextField.clearsOnBeginEditing = true;

func textFieldShouldClear(textField: UITextField) -> Bool {
    return true
}
Tritmm
la source
6

Sur Xcode 8 (8A218a):

Rapide:

textField.clearButtonMode = UITextField.ViewMode.whileEditing;

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

Aidan.C
la source
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

     }
}
Pardeep Kumar
la source
-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.

Carlson
la source