188

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

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

4

11 回答 11

359

这个按钮是类提供的内置覆盖UITextField,但是从 iOS 2.2 SDK 开始,没有任何方法可以通过 Interface Builder 设置它。您必须以编程方式启用它。

在某处添加这行代码(viewDidLoad例如):

Objective-C

myUITextField.clearButtonMode = UITextFieldViewModeWhileEditing;

斯威夫特 5.0

myUITextField.clearButtonMode = .whileEditing
于 2008-11-26T08:45:09.913 回答
65

您也可以直接从 Attributes Inspector 下的 Interface Builder 进行设置。

在此处输入图像描述

取自 XCode 5.1

于 2014-05-30T02:30:25.937 回答
49

斯威夫特 4+:

textField.clearButtonMode = UITextField.ViewMode.whileEditing

甚至更短:

textField.clearButtonMode = .whileEditing
于 2015-10-06T20:38:59.180 回答
35

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

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];
于 2013-08-06T10:47:35.267 回答
8

目标 C:

self.txtUserNameTextfield.myUITextField.clearButtonMode = UITextFieldViewModeWhileEditing;

斯威夫特:

txtUserNameTextfield.clearButtonMode = UITextField.ViewMode.WhileEditing;
于 2016-02-03T10:45:25.617 回答
7

这不起作用,像我一样:

迅速:

customTextField.clearButtonMode = UITextField.ViewMode.Always

customTextField.clearsOnBeginEditing = true;

func textFieldShouldClear(textField: UITextField) -> Bool {
    return true
}
于 2016-06-23T02:51:56.397 回答
7

Swift 4(改编自 Kristopher Johnson 的回答)

textfield.clearButtonMode = .always

textfield.clearButtonMode = .whileEditing

textfield.clearButtonMode = .unlessEditing

textfield.clearButtonMode = .never
于 2018-10-22T11:21:03.723 回答
6

在 Xcode 8 (8A218a) 上:

迅速:

textField.clearButtonMode = UITextField.ViewMode.whileEditing;

“W”从大写变为非大写“w”。

于 2016-09-21T08:40:29.773 回答
1
  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

     }
}
于 2018-05-28T04:13:41.470 回答
0

使用下面的代码行。如果 rightView 有没有显示清除按钮。

self.txtField.rightView = nil
self.txtField.rightViewMode = .never
self.txtField.clearButtonMode = UITextField.ViewMode.always
于 2022-01-29T05:12:36.027 回答
-4

在 Xcode 版本 8.1 (8B62) 上,它可以直接在 Attributes Inspector 中完成。选择 textField,然后从位于 Attributes Inspector 中的 Clear Button 下拉框中选择适当的选项。

于 2016-11-05T14:14:28.623 回答