自定义UITextField清除按钮

时间:2012-02-11 10:00:47

标签: objective-c ios uitextfield

是否可以在UITextField中自定义清除按钮的图像?我有一个黑色的文本字段背景,“x”不够明显。

7 个答案:

答案 0 :(得分:50)

您可以将自己的自定义清除按钮设置为文本字段的rightView属性。确保将rightViewMode属性设置为UITextFieldViewModeWhileEditingUITextFieldViewModeAlways,无论哪种情况都适用于您的情况。

如果按钮的位置不适合您的需要,您可以继承UITextField并覆盖rightViewRectForBounds:方法。

文档说明clearButtonMode属性的默认值为UITextFieldViewModeNever,但我怀疑Interface Builder可能会将其设置为UITextFieldViewModeWhileEditing - 请确保将其设置为“never”值,以便它没有出现。

所有这些属性都记录在UITextField Class Reference中。

答案 1 :(得分:33)

您可以使用KVO访问该媒体资源:

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

答案 2 :(得分:8)

经过测试的iOS7.0 - 8.4

可以使用以下UIAppearance方法更新所有清除按钮的backgroundImage。遗憾的是,您无法更新按钮的图像:

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

使用以下图像,会产生以下清除按钮:

白色背景图片@ 3x:

  

White clear button background

enter image description here

注意:这将更新文本字段中包含的所有按钮的背景图像

答案 3 :(得分:2)

Swift 2.2+ / iOS 9+版@Brody Robertson的回答:

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

答案 4 :(得分:1)

取决于@TussLá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版本中更改实现,那将无法正常工作

答案 5 :(得分:1)

Swift 3

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

答案 6 :(得分:0)

一种方法是创建一个自定义UITextField,将您想要的图像作为子视图,并在点击时清除父文本字段。您禁用默认按钮并在此自定义文本字段中添加自定义行为。

这应该让你开始。如果有任何更具体的问题,请随时编辑您的问题或在此处发表评论,如果这是一个小问题。