自定义UITextField清除button

是否可以自定义UITextField清除button的图像? 我有一个黑暗的文本框背景,“x”不够明显。

您可以将自己的自定义清除button设置为文本字段的rightView属性。 确保将rightViewMode属性设置为UITextFieldViewModeWhileEditingUITextFieldViewModeAlways ,无论您的情况是否rightViewMode

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

该文档说clearButtonMode属性的默认值是UITextFieldViewModeNever ,但我怀疑Interface Builder可能会将其设置为UITextFieldViewModeWhileEditing – 确保将其设置为“never”值,以免出现。

所有这些属性都logging在UITextField类参考中 。

您可以使用KVO访问该属性:

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

testingiOS7.0 – 8.4

可以使用以下UIAppearance方法更新所有清除button的backgroundImage。 不幸的是,你不能更新button的图像:

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

使用下面的图像,这将导致以下清除button:

白色背景图像@ 3x:

白色的清除按钮背景

在这里输入图像说明

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

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

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

一种方法是创build一个自定义的UITextField ,将所需的图像作为子视图,并在点击时清除父文本字段。 您可以禁用默认button,并在自定义文本字段中添加自定义行为。

这应该让你开始。 如果还有其他具体的问题,如果这是一个小问题,请随时在这里编辑您的问题或评论。

取决于@TussLászló的回答

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) } 

但是真的要小心使用它。 如果苹果在未来的iOS版本中改变实现,那就不行了

Swift 3

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