Можно ли настроить изображение кнопки очистки в UITextField
? У меня есть темный фон текстового поля, а "x" недостаточно отображается.
Пользовательская кнопка очистки UITextField
Ответ 1
Вы можете установить свою собственную кнопку очистки в текстовое поле rightView
. Убедитесь, что для свойства rightViewMode
установлено значение UITextFieldViewModeWhileEditing
или UITextFieldViewModeAlways
, что имеет смысл для вашего случая.
Если позиция кнопки не подходит для ваших нужд, вы можете подклассифицировать UITextField
и переопределить метод rightViewRectForBounds:
.
В документации указано, что значение по умолчанию для свойства clearButtonMode
равно UITextFieldViewModeNever
, но я подозреваю, что Interface Builder может установить его на UITextFieldViewModeWhileEditing
. Убедитесь, что вы установили его в значение "никогда", чтобы оно не отображалось.
Все эти свойства описаны в UITextField Class Reference.
Ответ 2
Вы можете получить доступ к этому свойству с помощью KVO:
UIButton *clearButton = [myTextField valueForKey:@"_clearButton"];
[clearButton setImage:[UIImage new] forState:UIControlStateNormal];
Ответ 3
Протестировано iOS7.0 - 8.4
Можно обновить backgroundImage всех кнопок очистки, используя следующий метод UIAppearance. К сожалению, вы не можете обновить изображение кнопки:
UIButton *defaultClearButton = [UIButton appearanceWhenContainedIn:[UITextField class], nil];
[defaultClearButton setBackgroundImage:[UIImage imageNamed:@"clearButtonBkg1.png"] forState:UIControlStateNormal];
Используя следующие изображения, это приведет к следующей кнопке очистки:
Белое фоновое изображение @3x:
Примечание. Это обновит фоновое изображение кнопок ALL, содержащихся в текстовых полях
Ответ 4
Swift 2.2+/iOS 9+ версия ответа @Brody Robertson:
let defaultClearButton = UIButton.appearanceWhenContainedInInstancesOfClasses([UITextField.self])
defaultClearButton.setBackgroundImage(UIImage(named: "ClearIcon"), forState: UIControlState.Normal)
Ответ 5
Один из подходов заключался бы в создании пользовательского UITextField
, который имеет желаемое изображение в качестве подвью и очищает родительское текстовое поле при нажатии. Вы отключите кнопку по умолчанию и добавьте свое пользовательское поведение в это настраиваемое текстовое поле.
Это должно помочь вам начать. Если есть более конкретные вопросы, не стесняйтесь редактировать свой вопрос или комментарий здесь, если это небольшая проблема.
Ответ 6
зависит от @Tuss László answer
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, это не будет работать
Ответ 7
Swift 3
let customClearButton = UIButton.appearance(whenContainedInInstancesOf: [UITextField.self])
customClearButton.setBackgroundImage(UIImage(named: "custom_cb"), for: .normal)