【问题标题】:Disabling user input for UITextfield in swift快速禁用 UITextfield 的用户输入
【发布时间】:2015-06-29 18:16:32
【问题描述】:

很简单的问题,我知道。但是我在网上找不到任何东西。

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

有什么想法吗?

一个程序化的解决方案,或者如果可以通过情节提要,那就太好了。

【问题讨论】:

  • 改用标签?

标签: ios swift uitextfield editing


【解决方案1】:

试试这个:

Swift 2.0

textField.userInteractionEnabled = false

Swift 3.0

textField.isUserInteractionEnabled = false

或者在情节提要中取消选中“启用用户交互”

【讨论】:

  • 谢谢。我查看了属性检查器。也许我只是不是很细心-___-
【解决方案2】:

如果您不希望用户能够修改您的 UITextField 中的任何内容,您可以改用 UILabel

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

yourTextField.enabled = false

在情节提要中做到这一点的方法:

取消选中UITextField属性中的已启用复选框

【讨论】:

    【解决方案3】:

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

    【讨论】:

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

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

    1. 将控件的“启用”设置为 false。

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

    这些选择之间的区别是:

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

    1. 首先是设置控件的启用。你可以看到背景颜色是 改变了。
    2. 其次是设置视图的“用户交互启用”。背景颜色没有改变。

    代码内:

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

      为 Swift 3 更新

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

    【讨论】:

    • 我喜欢您提供的屏幕截图以显示两者之间的区别。 ??
    【解决方案5】:

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

    //
    //  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)
        }
    
    }
    

    【讨论】:

      【解决方案6】:

      Swift 4.2 / Xcode 10.1:

      只需在情节提要 -> 属性检查器中取消选中行为已启用

      【讨论】:

      • 它似乎已启用而不是可编辑。变了吗?
      • 你是对的,它已启用。打字错误。谢谢
      【解决方案7】:

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

      self.myField.inputView = UIView()
      

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

      【讨论】:

      • 正是我正在寻找的行为!谢谢
      【解决方案8】:

      在 swift 5 中,我使用以下代码禁用了文本字段

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-01-23
        • 1970-01-01
        • 2015-10-18
        • 1970-01-01
        • 2019-10-17
        • 1970-01-01
        • 1970-01-01
        • 2014-09-02
        相关资源
        最近更新 更多