Aggiunta del pulsante "Cancella" a un UITextField di iPhone
-
11-07-2019 - |
Domanda
Come aggiungi quel piccolo "X"? pulsante sul lato destro di un UITextField che cancella il testo? Non riesco a trovare un attributo per aggiungere questo sottocontrollo in Interface Builder nell'SDK per iPhone OS 2.2.
Nota: in Xcode 4.xe versioni successive (iPhone 3.0 SDK e versioni successive), puoi farlo in Interface Builder.
Soluzione
Questo pulsante è un overlay integrato fornito dalla classe UITextField, ma a partire dall'SDK per iPhone OS 2.2, non è possibile impostarlo tramite Interface Builder. Devi abilitarlo a livello di programmazione.
Aggiungi questa riga di codice da qualche parte (ad esempio viewDidLoad):
myUITextField.clearButtonMode = UITextFieldViewModeWhileEditing;
AGGIORNAMENTO: L'ultima versione di Xcode IB supporta questa proprietà.
Altri suggerimenti
Puoi anche impostarlo direttamente da Interface Builder in Impostazioni attributi.
Tratto da XCode 5.1
Swift 4+:
textField.clearButtonMode = UITextField.ViewMode.whileEditing
o anche più breve:
textField.clearButtonMode = .whileEditing
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];
Obiettivo C:
self.txtUserNameTextfield.myUITextField.clearButtonMode = UITextFieldViewModeWhileEditing;
Swift:
txtUserNameTextfield.clearButtonMode = UITextField.ViewMode.WhileEditing;
Swift 4 (adattato dalla risposta di Kristopher Johnson)
textfield.clearButtonMode = .always
textfield.clearButtonMode = .whileEditing
textfield.clearButtonMode = .unlessEditing
textfield.clearButtonMode = .never
questo non funziona, mi piaccio:
swift:
customTextField.clearButtonMode = UITextField.ViewMode.Always
customTextField.clearsOnBeginEditing = true;
func textFieldShouldClear(textField: UITextField) -> Bool {
return true
}
Su Xcode 8 (8A218a):
Swift:
textField.clearButtonMode = UITextField.ViewMode.whileEditing;
Il " W " è passato dal capitale al non cap "w",
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
}
}
Su Xcode versione 8.1 (8B62) può essere eseguito direttamente in Attributes Inspector. Selezionare textField e quindi scegliere l'opzione appropriata dalla casella a discesa Pulsante Cancella, che si trova in Impostazioni Attributi.