关于ios:将“清除”按钮添加到iPhone UITextField

Adding the “Clear” Button to an iPhone UITextField

如何在清除文本的UITextField的右侧添加小" X"按钮? 我在iPhone OS 2.2 SDK的Interface Builder中找不到用于添加此子控件的属性。

注意:在Xcode 4.x和更高版本(iPhone 3.0 SDK和更高版本)中,可以在Interface Builder中执行此操作。


此按钮是UITextField类提供的内置叠加层,但是从iPhone OS 2.2 SDK开始,没有任何方法可以通过Interface Builder进行设置。您必须以编程方式启用它。

将以下代码行添加到某处(例如,viewDidLoad):

目标C

1
myUITextField.clearButtonMode = UITextFieldViewModeWhileEditing;

斯威夫特5.0

1
myUITextField.clearButtonMode = UITextField.ViewMode.whileEditing

更新:最新版本的Xcode IB确实支持此属性。


您也可以直接在"属性"检查器下的"界面生成器"中进行设置。

enter image description here

取自XCode 5.1


迅捷4+:

1
textField.clearButtonMode = UITextField.ViewMode.whileEditing

甚至更短:

1
textField.clearButtonMode = .whileEditing


您可以使用以下方法添加自定义清除按钮并控制大小和所有内容:

1
2
3
4
5
6
7
UIButton *clearButton = [UIButton buttonWithType:UIButtonTypeCustom];
[clearButton setImage:img forState:UIControlStateNormal];
[clearButton setFrame:frame];
[clearButton addTarget:self action:@selector(clearTextField:) forControlEvents:UIControlEventTouchUpInside];

textField.rightViewMode = UITextFieldViewModeAlways; //can be changed to UITextFieldViewModeNever,    UITextFieldViewModeWhileEditing,   UITextFieldViewModeUnlessEditing
[textField setRightView:clearButton];

目标C:

1
self.txtUserNameTextfield.myUITextField.clearButtonMode = UITextFieldViewModeWhileEditing;

斯威夫特:

1
txtUserNameTextfield.clearButtonMode = UITextField.ViewMode.WhileEditing;

斯威夫特4(改编自克里斯托弗·约翰逊的答案)

1
2
3
4
5
6
7
textfield.clearButtonMode = .always

textfield.clearButtonMode = .whileEditing

textfield.clearButtonMode = .unlessEditing

textfield.clearButtonMode = .never


在Xcode 8(8A218a)上:

迅速:

1
textField.clearButtonMode = UITextField.ViewMode.whileEditing;

" W"从大写字母变为非大写的" w"。


这不起作用,像我一样做:

swift:

1
2
3
4
5
6
7
customTextField.clearButtonMode = UITextField.ViewMode.Always

customTextField.clearsOnBeginEditing = true;

func textFieldShouldClear(textField: UITextField) -> Bool {
    return true
}

1
2
3
4
5
6
7
8
9
10
11
12
  func clear_btn(box_is : UITextField){
    box_is.clearButtonMode = .always
    if let clearButton = box_is.value(forKey:"_clearButton") as? UIButton {
        let templateImage =  clearButton.imageView?.image?.withRenderingMode(.alwaysTemplate)

        clearButton.setImage(templateImage, for: .normal)
        clearButton.setImage(templateImage, for: .highlighted)

        clearButton.tintColor = .white

     }
}

在Xcode版本8.1(8B62)上,可以直接在Attributes Inspector中完成。选择textField,然后从"属性检查器"中的"清除按钮"下拉框中选择适当的选项。