Подтвердить что ты не робот

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

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

4b9b3361

Ответ 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)