自定义UITextField清除按钮

gem*_*ini 35 objective-c uitextfield ios

是否可以自定义清除按钮的图像UITextField?我有一个黑暗的文本字段背景,"x"不够明显.

Dan*_*nra 51

您可以将自己的自定义清除按钮设置为文本字段的rightView属性.确保将rightViewMode属性设置为UITextFieldViewModeWhileEditingUITextFieldViewModeAlways对您的案例有意义.

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

文档说明clearButtonMode属性的默认值是UITextFieldViewModeNever,但我怀疑Interface Builder可能将其设置为UITextFieldViewModeWhileEditing- 确保将其设置为"never"值,以便它不会出现.

所有这些属性都记录在UITextField类参考中.

  • 注意:似乎`rightViewMode`和`clearButtonMode`的`UITextFieldViewModeAlways`表现不同.当字段为空时,后者不会显示视图,而前者则为空. (4认同)
  • rightView属性只是一个视图.您将不得不添加UIButton并实现您自己的清除方法. (4认同)
  • 这应该比Sebastian提出的子类化UITextField更容易. (3认同)

Las*_*zlo 32

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

UIButton *clearButton = [myTextField valueForKey:@"_clearButton"];
[clearButton setImage:[UIImage new] forState:UIControlStateNormal];
Run Code Online (Sandbox Code Playgroud)

  • **绝对可怕的想法**.我们曾经在UIAlertViews上做过类似的事情来访问按钮.当苹果改变他们的实施时,所有应用程序购买都停止了工作,我们留下了数周的"修复工作" (14认同)
  • 使用它有风险,因为它可能会在未来的操作系统版本中中断。我以前被咬过。 (3认同)

Bro*_*son 8

测试iOS7.0 - 8.4

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

UIButton *defaultClearButton = [UIButton appearanceWhenContainedIn:[UITextField class], nil];
[defaultClearButton setBackgroundImage:[UIImage imageNamed:@"clearButtonBkg1.png"] forState:UIControlStateNormal];
Run Code Online (Sandbox Code Playgroud)

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

白色背景图片@ 3x:

白色清楚的按钮背景

在此输入图像描述

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