在 swift 中禁用 UITextfield 的用户输入

Disabling user input for UITextfield in swift

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

我需要禁止用户编辑文本字段内的文本。这样当点击文本时,键盘不会出现。

有什么想法吗?

一个程序化的解决方案,或者如果可能的话,通过故事板会很棒。

试试这个:

Swift 2.0:

textField.userInteractionEnabled = false

Swift 3.0:

textField.isUserInteractionEnabled = false

或在情节提要中取消选中 "User Interaction Enabled"

如果您不希望用户能够修改您 UITextField

中的任何内容,则可以改用 UILabel

编程解决方案是使用 enabled 属性:

yourTextField.enabled = false

一种在故事板中实现的方法:

取消选中 UITextField

属性中的 Enabled 复选框

另一种解决方案,将您的控制器声明为 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
}

在情节提要中你有两个选择:

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

  1. 设置视图的'user interaction enable' false

这些选择的区别是:

要在屏幕中显示的 UITextfild 的外观。

  1. 首先是设置控件的启用。可以看到背景颜色是 改变了。
  2. 其次是设置视图的'User interaction enable'。背景颜色未更改。

代码内:

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

    更新 Swift 3

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

我喜欢像以前那样做。您只需像这样使用自定义 UITextField Class:

//
//  ReadOnlyTextField.swift
//  MediFormulas
//
//  Created by Oscar Rodriguez on 6/21/17.
//  Copyright © 2017 Nica Code. All rights reserved.
//

import UIKit

class ReadOnlyTextField: UITextField {

    /*
    // Only override draw() if you perform custom drawing.
    // An empty implementation adversely affects performance during animation.
    override func draw(_ rect: CGRect) {
        // Drawing code
    }
    */

    override init(frame: CGRect) {
        super.init(frame: frame)

        // Avoid keyboard to show up
        self.inputView = UIView()
    }

    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)

        // Avoid keyboard to show up
        self.inputView = UIView()
    }

    override func canPerformAction(_ action: Selector, withSender sender: Any?) -> Bool {
        // Avoid cut and paste option show up
        if (action == #selector(self.cut(_:))) {
            return false
        } else if (action == #selector(self.paste(_:))) {
            return false
        }

        return super.canPerformAction(action, withSender: sender)
    }

}

Swift 4.2 / Xcode 10.1:

只需在故事板 -> 属性检查器中取消选中行为 已启用

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

self.myField.inputView = UIView()

这样它会聚焦但不会显示键盘。

在swift5中,我使用了下面的代码来禁用文本框

override func viewDidLoad() {
   super.viewDidLoad()
   self.textfield.isEnabled = false
   //e.g
   self.design.isEnabled = false
}

textField.isUserInteractionEnabled = 假