禁用文本字段触摸但仍接受编辑?

Posted

技术标签:

【中文标题】禁用文本字段触摸但仍接受编辑?【英文标题】:Make textfield touch disabled but still accept editing? 【发布时间】:2019-05-15 19:15:01 【问题描述】:

我的问题与this one相反。

我有多个文本字段,并且默认情况下将一个文本字段设置为第一响应者,但我不希望他们单击​​不同的文本视图并手动转到它们。我仍然希望文本字段是可编辑的。有没有办法禁止用户触摸文本字段进行编辑?

【问题讨论】:

【参考方案1】:

创建UITextField 子类并覆盖hitTest point 方法并返回nil

class CustomTextField: UITextField 
    override func hitTest(_ point: CGPoint, with event: UIEvent?) -> UIView? 
        return nil
    

在视图控制器中使用自定义类。在viewDidAppear 中,在第一个文本字段中使用becomeFirstResponder,在textFieldShouldReturn 方法中移动到下一个文本字段。确保将委托设置为所有文本字段。

class ViewController: UIViewController, UITextFieldDelegate 

    let textField1 = CustomTextField()
    let textField2 = CustomTextField()

    override func viewDidLoad() 
        super.viewDidLoad()

        view.backgroundColor = .white

        textField1.delegate = self
        textField1.returnKeyType = .next
        view.addSubview(textField1)

        textField2.delegate = self
        textField2.returnKeyType = .send
        view.addSubview(textField2)

        //add constraints or set frame
    
    override func viewDidAppear(_ animated: Bool) 
        super.viewDidAppear(animated)
        textField1.becomeFirstResponder()
    
    func textFieldShouldReturn(_ textField: UITextField) -> Bool 
        if textField == textField1 
            textField2.becomeFirstResponder()
        
        return true
    

【讨论】:

【参考方案2】:

有一个选项.....试试这个...

    func textFieldShouldReturn(_ textField: UITextField) -> Bool
    
        // Try to find next responder
        if let nextField = textField.superview?.viewWithTag(textField.tag + 1) as? UITextField 
            textField.isUserInteractionEnabled = false
            nextField.isUserInteractionEnabled = true
            nextField.becomeFirstResponder()
         else 
            // Not found, so remove keyboard.
            textField.resignFirstResponder()
        
        // Do not add a line break
        return false
    

如果您想禁用或启用当前文本字段,由您决定。

我忘了说你必须先设置禁用用户交互属性,并为每个文本字段添加标签

【讨论】:

以上是关于禁用文本字段触摸但仍接受编辑?的主要内容,如果未能解决你的问题,请参考以下文章

如何通过快速触摸单元格内的按钮来编辑文本字段

禁用 UIButton 注册触摸并引发错误

UIView alpha 0 但仍接收触摸事件?

以编程方式禁用移动 Chrome 43 的“触摸搜索”功能

Flutter:ListView禁用触摸屏滚动

触摸文本字段不起作用