it-swarm.com.ru

Пользовательская кнопка очистки UITextField

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

28
gemini

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

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

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

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

49
Danra

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

UIButton *clearButton = [myTextField valueForKey:@"_clearButton"];
[clearButton setImage:[UIImage new] forState:UIControlStateNormal];
33
Laszlo

Протестировано 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

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

8
Brody Robertson

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

let defaultClearButton = UIButton.appearanceWhenContainedInInstancesOfClasses([UITextField.self])
defaultClearButton.setBackgroundImage(UIImage(named: "ClearIcon"), forState: UIControlState.Normal)
2
zgorawski

Swift 3

let customClearButton = UIButton.appearance(whenContainedInInstancesOf: [UITextField.self])
customClearButton.setBackgroundImage(UIImage(named: "custom_cb"), for: .normal)
1
Claus

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

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, это не будет работать

1
Pavel Volobuev

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

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

0
Sebastian Wramba