Menambahkan Tombol "Clear" ke iPhone UITextField

175

Bagaimana Anda menambahkan tombol "X" kecil di sisi kanan UITextField yang menghapus teks? Saya tidak dapat menemukan atribut untuk menambahkan sub-kontrol ini di Interface Builder di iPhone OS 2.2 SDK.

Catatan: Di Xcode 4.x dan yang lebih baru (iPhone 3.0 SDK dan yang lebih baru), Anda bisa melakukan ini di Interface Builder.

Kristopher Johnson
sumber

Jawaban:

329

Tombol ini adalah overlay internal yang disediakan oleh UITextFieldkelas, tetapi pada iOS 2.2 SDK, tidak ada cara untuk mengaturnya melalui Interface Builder. Anda harus mengaktifkannya secara terprogram.

Tambahkan baris kode ini di suatu tempat ( viewDidLoad, misalnya):

Objektif-C

myUITextField.clearButtonMode = UITextFieldViewModeWhileEditing;

Swift 5.0

myUITextField.clearButtonMode = .whileEditing
Kristopher Johnson
sumber
61

Anda juga dapat mengatur ini langsung dari Interface Builder di bawah Inspektur Atribut.

masukkan deskripsi gambar di sini

Diambil dari XCode 5.1

Nicholas Harlen
sumber
1
Perhatikan bahwa pertanyaan ini secara khusus menanyakan tentang 2.2 SDK, dan mencatat bahwa opsi ini tersedia di Interface Builder di versi yang lebih baru.
Kristopher Johnson
47

Swift 4+:

textField.clearButtonMode = UITextField.ViewMode.whileEditing

atau bahkan lebih pendek:

textField.clearButtonMode = .whileEditing
Esqarrouth
sumber
Perbaiki tipe enum. Tidak boleh mulai dari huruf kapital.
T. Pasichnyk
35

Anda dapat menambahkan tombol hapus kustom dan mengontrol ukuran dan semuanya menggunakan ini:

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

Sasaran C:

self.txtUserNameTextfield.myUITextField.clearButtonMode = UITextFieldViewModeWhileEditing;

Cepat:

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

Swift 4 (diadaptasi dari jawaban Kristopher Johnson)

textfield.clearButtonMode = .always

textfield.clearButtonMode = .whileEditing

textfield.clearButtonMode = .unlessEditing

textfield.clearButtonMode = .never
Edouard Barbier
sumber
6

ini tidak berhasil, suka saya:

cepat:

customTextField.clearButtonMode = UITextField.ViewMode.Always

customTextField.clearsOnBeginEditing = true;

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

Pada Xcode 8 (8A218a):

Cepat:

textField.clearButtonMode = UITextField.ViewMode.whileEditing;

"W" beralih dari modal ke non-cap "w".

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

Pada Xcode Versi 8.1 (8B62) dapat dilakukan langsung di Atribut Inspektur. Pilih textField dan kemudian pilih opsi yang sesuai dari kotak drop down Clear Button, yang terletak di Attributes Inspector.

carlson
sumber