Dodanie przycisku „Clear” do iPhone UITextField

175

Jak dodać ten mały przycisk „X” po prawej stronie UITextField, który czyści tekst? Nie mogę znaleźć atrybutu do dodania tej kontroli podrzędnej w programie Interface Builder w zestawie SDK systemu iPhone OS 2.2.

Uwaga: w Xcode 4.xi nowszych (iPhone 3.0 SDK i nowsze) możesz to zrobić w programie Interface Builder.

Kristopher Johnson
źródło

Odpowiedzi:

329

Ten przycisk jest wbudowaną nakładką dostarczaną przez UITextFieldklasę, ale od SDK systemu iOS 2.2 nie ma możliwości ustawienia go za pomocą Interface Builder. Musisz włączyć to programowo.

Dodaj gdzieś ten wiersz kodu ( viewDidLoadna przykład):

Cel C

myUITextField.clearButtonMode = UITextFieldViewModeWhileEditing;

Swift 5.0

myUITextField.clearButtonMode = .whileEditing
Kristopher Johnson
źródło
61

Możesz również ustawić to bezpośrednio w Interface Builder w Inspektorze atrybutów.

wprowadź opis obrazu tutaj

Zaczerpnięte z XCode 5.1

Nicholas Harlen
źródło
1
Zwróć uwagę, że pytanie dotyczy konkretnie 2.2 SDK i zauważa, że ​​ta opcja jest dostępna w Interface Builder w nowszych wersjach.
Kristopher Johnson
47

Swift 4+:

textField.clearButtonMode = UITextField.ViewMode.whileEditing

lub jeszcze krócej:

textField.clearButtonMode = .whileEditing
Esqarrouth
źródło
Napraw typ wyliczenia. Nie może zaczynać się od dużej litery.
T. Pasichnyk
35

możesz dodać niestandardowy przycisk wyczyść i kontrolować rozmiar i wszystko, używając tego:

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
źródło
7

Cel C :

self.txtUserNameTextfield.myUITextField.clearButtonMode = UITextFieldViewModeWhileEditing;

Szybki:

txtUserNameTextfield.clearButtonMode = UITextField.ViewMode.WhileEditing;
PT Vyas
źródło
6

Swift 4 (na podstawie odpowiedzi Kristophera Johnsona)

textfield.clearButtonMode = .always

textfield.clearButtonMode = .whileEditing

textfield.clearButtonMode = .unlessEditing

textfield.clearButtonMode = .never
Edouard Barbier
źródło
6

to nie działa, polub mnie:

szybki:

customTextField.clearButtonMode = UITextField.ViewMode.Always

customTextField.clearsOnBeginEditing = true;

func textFieldShouldClear(textField: UITextField) -> Bool {
    return true
}
Tritmm
źródło
6

W Xcode 8 (8A218a):

Szybki:

textField.clearButtonMode = UITextField.ViewMode.whileEditing;

„W” przeszedł od kapitału do „w” bez ograniczenia.

Aidan.C
źródło
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
źródło
-4

W Xcode w wersji 8.1 (8B62) można to zrobić bezpośrednio w Inspektorze atrybutów. Wybierz pole tekstowe, a następnie wybierz odpowiednią opcję z listy rozwijanej przycisku Wyczyść, która znajduje się w Inspektorze atrybutów.

Carlson
źródło