自定义UITextField清除button
是否可以自定义UITextField
清除button的图像? 我有一个黑暗的文本框背景,“x”不够明显。
您可以将自己的自定义清除button设置为文本字段的rightView
属性。 确保将rightViewMode
属性设置为UITextFieldViewModeWhileEditing
或UITextFieldViewModeAlways
,无论您的情况是否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)