Aggiunta del pulsante "Cancella" a un UITextField di iPhone


175

Come si aggiunge quel piccolo pulsante "X" sul lato destro di un UITextField che cancella il testo? Non riesco a trovare un attributo per l'aggiunta di questo sottocontrollo in Interface Builder nell'SDK del sistema operativo iPhone 2.2.

Nota: in Xcode 4.xe versioni successive (iPhone 3.0 SDK e versioni successive), puoi farlo in Interface Builder.

Risposte:


329

Questo pulsante è un overlay integrato fornito dalla UITextFieldclasse, ma a partire dall'SDK di iOS 2.2, non è possibile impostarlo tramite Interface Builder. Devi abilitarlo a livello di codice.

Aggiungi questa riga di codice da qualche parte ( viewDidLoadad esempio):

Objective-C

myUITextField.clearButtonMode = UITextFieldViewModeWhileEditing;

Swift 5.0

myUITextField.clearButtonMode = .whileEditing

61

Puoi anche impostarlo direttamente da Interface Builder in Impostazioni attributi.

inserisci qui la descrizione dell'immagine

Tratto da XCode 5.1


1
Si noti che la domanda pone in particolare l'SDK 2.2 e nota che questa opzione è disponibile in Interface Builder nelle versioni successive.
Kristopher Johnson

47

Swift 4+:

textField.clearButtonMode = UITextField.ViewMode.whileEditing

o anche più breve:

textField.clearButtonMode = .whileEditing

Fix enum type. Non deve iniziare dalla lettera maiuscola.
T. Pasichnyk,

35

puoi aggiungere un pulsante di cancellazione personalizzato e controllare le dimensioni e ogni cosa usando questo:

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

Obiettivo C:

self.txtUserNameTextfield.myUITextField.clearButtonMode = UITextFieldViewModeWhileEditing;

Veloce:

txtUserNameTextfield.clearButtonMode = UITextField.ViewMode.WhileEditing;

6

Swift 4 (adattato dalla risposta di Kristopher Johnson)

textfield.clearButtonMode = .always

textfield.clearButtonMode = .whileEditing

textfield.clearButtonMode = .unlessEditing

textfield.clearButtonMode = .never

6

questo non funziona, fai come me:

sWIFT:

customTextField.clearButtonMode = UITextField.ViewMode.Always

customTextField.clearsOnBeginEditing = true;

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

6

Su Xcode 8 (8A218a):

Swift:

textField.clearButtonMode = UITextField.ViewMode.whileEditing;

La "W" è passata dal capitale al non-cap "w".


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

Su Xcode versione 8.1 (8B62) può essere eseguito direttamente in Impostazioni attributi. Selezionare textField e quindi scegliere l'opzione appropriata dalla casella a discesa Pulsante Cancella, che si trova in Impostazioni Attributi.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.