Agregar el botón "Borrar" a un iPhone UITextField

175

¿Cómo agrega ese pequeño botón "X" en el lado derecho de un UITextField que borra el texto? No puedo encontrar un atributo para agregar este subcontrol en Interface Builder en el iPhone OS 2.2 SDK.

Nota: en Xcode 4.xy versiones posteriores (iPhone 3.0 SDK y versiones posteriores), puede hacerlo en Interface Builder.

Kristopher Johnson
fuente

Respuestas:

329

Este botón es una superposición incorporada que proporciona el UITextField clase, pero a partir del SDK de iOS 2.2, no hay forma de configurarlo a través de Interface Builder. Tienes que habilitarlo mediante programación.

Agregue esta línea de código en alguna parte (viewDidLoad por ejemplo):

C objetivo

myUITextField.clearButtonMode = UITextFieldViewModeWhileEditing;

Swift 5.0

myUITextField.clearButtonMode = .whileEditing
Kristopher Johnson
fuente
61

También puede configurarlo directamente desde el Creador de interfaces en el Inspector de atributos.

ingrese la descripción de la imagen aquí

Tomado de XCode 5.1

Nicholas Harlen
fuente
1
Tenga en cuenta que la pregunta se refiere específicamente al 2.2 SDK y señala que esta opción está disponible en Interface Builder en versiones posteriores.
Kristopher Johnson
47

Swift 4+:

textField.clearButtonMode = UITextField.ViewMode.whileEditing

o incluso más corto:

textField.clearButtonMode = .whileEditing
Esqarrouth
fuente
Fix enum type. No debe comenzar desde mayúscula.
T. Pasichnyk
35

Puede agregar un botón de borrado personalizado y controlar el tamaño y cada cosa usando esto:

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
fuente
7

C objetivo :

self.txtUserNameTextfield.myUITextField.clearButtonMode = UITextFieldViewModeWhileEditing;

Rápido:

txtUserNameTextfield.clearButtonMode = UITextField.ViewMode.WhileEditing;
PT Vyas
fuente
6

Swift 4 (adaptado de la respuesta de Kristopher Johnson)

textfield.clearButtonMode = .always

textfield.clearButtonMode = .whileEditing

textfield.clearButtonMode = .unlessEditing

textfield.clearButtonMode = .never
Edouard Barbier
fuente
6

esto no funciona, me gusta:

rápido:

customTextField.clearButtonMode = UITextField.ViewMode.Always

customTextField.clearsOnBeginEditing = true;

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

En Xcode 8 (8A218a):

Rápido:

textField.clearButtonMode = UITextField.ViewMode.whileEditing;

La "W" pasó de capital a "w" sin límite.

Aidan.C
fuente
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
fuente
-4

En Xcode Versión 8.1 (8B62) se puede hacer directamente en el Inspector de atributos. Seleccione el campo de texto y luego elija la opción apropiada del cuadro desplegable Borrar botón, que se encuentra en el Inspector de atributos.

carlson
fuente