Adicionando o botão "Limpar" a um iPhone UITextField

175

Como você adiciona esse pequeno botão "X" no lado direito de um UITextField que limpa o texto? Não consigo encontrar um atributo para adicionar este subcontrole no Interface Builder no SDK do iPhone OS 2.2.

Nota: No Xcode 4.xe posterior (iPhone 3.0 SDK e posterior), você pode fazer isso no Interface Builder.

Kristopher Johnson
fonte

Respostas:

329

Esse botão é uma sobreposição interna fornecida pela UITextFieldclasse, mas no SDK do iOS 2.2, não há como defini-lo por meio do Interface Builder. Você precisa habilitá-lo programaticamente.

Adicione esta linha de código em algum lugar ( viewDidLoadpor exemplo):

Objetivo-C

myUITextField.clearButtonMode = UITextFieldViewModeWhileEditing;

Swift 5.0

myUITextField.clearButtonMode = .whileEditing
Kristopher Johnson
fonte
61

Você também pode definir isso diretamente no Interface Builder, no Inspetor de atributos.

insira a descrição da imagem aqui

Retirado do XCode 5.1

Nicholas Harlen
fonte
1
Observe que a pergunta pergunta especificamente sobre o SDK 2.2 e observa que esta opção está disponível no Interface Builder em versões posteriores.
Kristopher Johnson
47

Swift 4+:

textField.clearButtonMode = UITextField.ViewMode.whileEditing

ou ainda mais curto:

textField.clearButtonMode = .whileEditing
Esqarrouth
fonte
Corrija o tipo de enumeração. Não deve começar com letra maiúscula.
T. Pasichnyk
35

você pode adicionar um botão de limpeza personalizado e controlar o tamanho e tudo mais usando isso:

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

Objetivo C:

self.txtUserNameTextfield.myUITextField.clearButtonMode = UITextFieldViewModeWhileEditing;

Rápido :

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

Swift 4 (adaptado da resposta de Kristopher Johnson)

textfield.clearButtonMode = .always

textfield.clearButtonMode = .whileEditing

textfield.clearButtonMode = .unlessEditing

textfield.clearButtonMode = .never
Edouard Barbier
fonte
6

isso não funciona, faça como eu:

rápido:

customTextField.clearButtonMode = UITextField.ViewMode.Always

customTextField.clearsOnBeginEditing = true;

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

No Xcode 8 (8A218a):

Rápido:

textField.clearButtonMode = UITextField.ViewMode.whileEditing;

O "W" passou do capital para o "w" sem limite.

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

No Xcode versão 8.1 (8B62), isso pode ser feito diretamente no Inspetor de atributos. Selecione o campo de texto e, em seguida, escolha a opção apropriada na caixa suspensa Botão Limpar, localizada no Inspetor de atributos.

Carlson
fonte