Niestandardowy przycisk Wyczyść UITextField

Czy można dostosować obraz przycisku Wyczyść w UITextField? Mam ciemne tło textfield i " x " nie jest wystarczająco widoczny.

Author: Sebastian Wramba, 2012-02-11

7 answers

Możesz ustawić własny przycisk Wyczyść do właściwości rightView pola tekstowego. Upewnij się, że właściwość rightViewMode jest ustawiona na UITextFieldViewModeWhileEditing lub UITextFieldViewModeAlways, niezależnie od tego, co ma sens w Twoim przypadku.

Jeśli pozycja przycisku nie jest odpowiednia dla Twoich potrzeb, możesz podklasować UITextField i nadpisać metodę rightViewRectForBounds:.

Dokumentacja mówi, że domyślną właściwością clearButtonMode jest UITextFieldViewModeNever, ale podejrzewam, że konstruktor interfejsu może ustawić ją na UITextFieldViewModeWhileEditing - Upewnij się, że ustawiłeś ją na wartość "never", aby nie pojawiaj się.

Wszystkie te właściwości są udokumentowane w UITextField Class Reference.

 46
Author: Danra,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-03-19 15:20:17

Możesz uzyskać dostęp do tej właściwości za pomocą KVO:

UIButton *clearButton = [myTextField valueForKey:@"_clearButton"];
[clearButton setImage:[UIImage new] forState:UIControlStateNormal];
 31
Author: Laszlo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-06-05 09:54:08

Testowany iOS7.0 - 8.4

Możliwe jest zaktualizowanie tła wszystkich przycisków clear przy użyciu następującej metody UIAppearance. Niestety nie można zaktualizować obrazu przycisku:

UIButton *defaultClearButton = [UIButton appearanceWhenContainedIn:[UITextField class], nil];
[defaultClearButton setBackgroundImage:[UIImage imageNamed:@"clearButtonBkg1.png"] forState:UIControlStateNormal];

Przy użyciu następujących obrazów, powoduje to następujący przycisk Wyczyść:

Białe tło obrazek @3x:

Białe jasne tło przycisku

Tutaj wpisz opis obrazka

Uwaga: spowoduje to aktualizację obrazu tła wszystkich przycisków contained in textfields

 8
Author: Brody Robertson,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-05-01 13:42:43

Swift 2.2+ / iOS 9 + Wersja odpowiedzi @ Brody Robertson:

let defaultClearButton = UIButton.appearanceWhenContainedInInstancesOfClasses([UITextField.self])
defaultClearButton.setBackgroundImage(UIImage(named: "ClearIcon"), forState: UIControlState.Normal)
 2
Author: zgorawski,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-09-02 12:57:53

Zależy od odpowiedzi @Tussló

Swift 3.0

myTextField.clearButtonMode = .whileEditing
if let clearButton = myTextField.value(forKeyPath: "_clearButton") as? UIButton {
    clearButton.setImage(UIImage(named:"myImage"), for: .normal)
    clearButton.setImage(UIImage(named:"myImage"), for: .highlighted)
}
Ale naprawdę używaj go ostrożnie. Jeśli Apple zmieni implementacje w przyszłych wydaniach iOS, nie będzie działać
 1
Author: Pavel Volobuev,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 11:54:27

Swift 3

let customClearButton = UIButton.appearance(whenContainedInInstancesOf: [UITextField.self])
customClearButton.setBackgroundImage(UIImage(named: "custom_cb"), for: .normal)
 1
Author: Claus,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-06-07 16:57:36

Jednym z rozwiązań byłoby utworzenie niestandardowego UITextField, który ma żądany obraz jako podgląd podrzędny i czyści Nadrzędne pole tekstowe po stuknięciu. Wyłącza się przycisk domyślny i dodaje własne zachowanie w tym niestandardowym polu tekstowym.

To powinno zacząć. Jeśli są jeszcze jakieś konkretne pytania, możesz edytować swoje pytanie lub komentować tutaj, jeśli jest to drobny problem.
 0
Author: Sebastian Wramba,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-02-11 10:08:12