在swift中禁用UITextfield的用户输入

Mat*_*oon 46 editing uitextfield ios swift

我知道,这是一个非常微不足道的问题.但我在网上找不到任何东西.

我需要禁止用户编辑文本字段内的文本.这样当单击文本时,键盘就不会显示出来.

有任何想法吗?

一个程序化的解决方案,或者如果可以通过故事板,那将是很棒的.

Vla*_*lad 96

试试这个:

Swift 2.0:

textField.userInteractionEnabled = false
Run Code Online (Sandbox Code Playgroud)

Swift 3.0:

textField.isUserInteractionEnabled = false
Run Code Online (Sandbox Code Playgroud)

或者在故事板中取消选中"启用用户交互"

在此输入图像描述


Duy*_*Hoa 40

另一个解决方案,将您的控制器声明为UITextFieldDelegate,实现此回调:

@IBOutlet weak var myTextField: UITextField!

override func viewDidLoad() {
    super.viewDidLoad()

    myTextField.delegate = self
}

func textFieldShouldBeginEditing(textField: UITextField) -> Bool {
    if textField == myTextField {
        return false; //do not show keyboard nor cursor
    }
    return true
}
Run Code Online (Sandbox Code Playgroud)

  • Swift 4:func textFieldShouldBeginEditing(_ textField: UITextField) (3认同)
  • 我最喜欢此解决方案,原因如下:我可能想禁用字段中的文本输入,但仍然收到该字段的“ leftView”或“ rightView”的触摸事件。这样的一个例子:假设我希望文本字段充当下拉列表。我不希望用户能够输入他或她想要的任何内容,但是我想知道他们是否单击了我的文本字段“ rightView”中的“下拉”箭头。当然,还有其他下拉菜单解决方案,但这看起来很干净,并且可以让您使用与其他文本字段相同的样式,而无需创建一个完全不同的类/对象。 (3认同)

dus*_*sty 22

在故事板中你有两个选择:

  1. 将控件的'enable'设置为false.

在此输入图像描述

  1. 将视图的"用户交互启用"设置为false

在此输入图像描述

这些选择之间的差异是:

UITextfild的外观显示在屏幕上.

在此输入图像描述

  1. 首先设置控件的启用.您可以看到背景颜色已更改.
  2. 第二个是设置视图的"用户交互启用".背景颜色不会改变.

在代码中:

  1. textfield.enable = false
  2. textfield.userInteractionEnabled = NO

    针对Swift 3进行了更新

    1. textField.isEnabled = false
    2. textfield.isUserInteractionEnabled = false

  • 我喜欢您提供屏幕截图以显示两者之间差异的方式。 (2认同)

jee*_*wat 7

如果您想在保持用户交互的同时执行此操作。就我而言,我正在使用(或者更确切地说是滥用)isFocused

self.myField.inputView = UIView()
Run Code Online (Sandbox Code Playgroud)

这样它会聚焦但键盘不会出现。