是否可以在UITextField
中自定义清除按钮的图像?我有一个黑色的文本字段背景,“x”不够明显。
答案 0 :(得分:50)
您可以将自己的自定义清除按钮设置为文本字段的rightView
属性。确保将rightViewMode
属性设置为UITextFieldViewModeWhileEditing
或UITextFieldViewModeAlways
,无论哪种情况都适用于您的情况。
如果按钮的位置不适合您的需要,您可以继承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:
注意:这将更新文本字段中包含的所有按钮的背景图像
答案 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
,将您想要的图像作为子视图,并在点击时清除父文本字段。您禁用默认按钮并在此自定义文本字段中添加自定义行为。
这应该让你开始。如果有任何更具体的问题,请随时编辑您的问题或在此处发表评论,如果这是一个小问题。