Пользовательская кнопка очистки UITextField - PullRequest
33 голосов
/ 11 февраля 2012

Можно ли настроить изображение кнопки очистки в UITextField? У меня темный фон текстового поля, а "x" недостаточно виден.

Ответы [ 7 ]

50 голосов
/ 11 февраля 2012

Вы можете установить собственную кнопку очистки для свойства rightView текстового поля. Убедитесь, что для свойства rightViewMode установлено значение UITextFieldViewModeWhileEditing или UITextFieldViewModeAlways, в зависимости от того, что имеет смысл для вашего случая.

Если позиция кнопки не соответствует вашим потребностям, вы можете создать подкласс UITextField и переопределить метод rightViewRectForBounds:.

В документации сказано, что для свойства clearButtonMode по умолчанию установлено значение UITextFieldViewModeNever, но я подозреваю, что Interface Builder может установить для него значение UITextFieldViewModeWhileEditing. Убедитесь, что вы установили значение "never", чтобы оно не отображалось.

Все эти свойства описаны в Справочник по классам UITextField .

33 голосов
/ 05 июня 2014

Вы можете получить доступ к этому свойству, используя KVO:

UIButton *clearButton = [myTextField valueForKey:@"_clearButton"];
[clearButton setImage:[UIImage new] forState:UIControlStateNormal];
8 голосов
/ 06 августа 2015

Протестировано iOS7.0 - 8.4

Возможно обновить backgroundImage всех кнопок очистки, используя следующий метод UIAppearance. К сожалению, вы не можете обновить изображение кнопки:

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

Использование следующих изображений приводит к появлению следующей кнопки очистки:

Белое фоновое изображение @ 3x:

White clear button background

enter image description here

Примечание: это обновит фоновое изображение ВСЕХ кнопок, содержащихся в текстовых полях

2 голосов
/ 02 сентября 2016

Swift 2.2+ / iOS 9+ версия ответа @Brody Robertson:

let defaultClearButton = UIButton.appearanceWhenContainedInInstancesOfClasses([UITextField.self])
defaultClearButton.setBackgroundImage(UIImage(named: "ClearIcon"), forState: UIControlState.Normal)
1 голос
/ 07 июня 2017

Swift 3

let customClearButton = UIButton.appearance(whenContainedInInstancesOf: [UITextField.self])
customClearButton.setBackgroundImage(UIImage(named: "custom_cb"), for: .normal)
1 голос
/ 14 марта 2017

зависит от ответа @Tuss László

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)
}

Но действительно используйте его осторожно.Если Apple изменит реализации в будущих выпусках iOS, это не будет работать

0 голосов
/ 11 февраля 2012

Один из подходов заключается в создании пользовательского UITextField, в котором в качестве подпредставления будет выбрано нужное изображение, а при касании очищается родительское текстовое поле.Вы отключаете кнопку по умолчанию и добавляете свое пользовательское поведение в это текстовое поле.

Это должно помочь вам начать.Если есть какие-то более конкретные вопросы, не стесняйтесь редактировать свой вопрос или комментарий здесь, если это небольшая проблема.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...