【问题标题】:TextField user interaction disabled, but display an error view when touched禁用 TextField 用户交互,但在触摸时显示错误视图
【发布时间】:2018-12-30 12:11:18
【问题描述】:

我有一个 UITextField,在我的 ViewController 的代码中,它的设置取决于它的值

textField.isUserInteractionEnabled = false

textField.isUserInteractionEnabled = true

现在,当用户交互被禁用时,我希望它仍然对触摸做出反应并显示错误消息(例如取消隐藏另一个视图),告诉用户无法编辑此文本字段。

如何以最精简的方式实现这一目标?这里的解决方案 (https://stackoverflow.com/a/9117285) 建议不要禁用用户交互,但拒绝内容更改 - 这是我不想要的(键盘不应该出现 - 当用户交互被禁用时它不会出现,但我也无法对触摸做出反应)。

【问题讨论】:

    标签: swift uitextfield


    【解决方案1】:

    当它被禁用时,您需要在文本字段上方添加一个视图以显示适当的消息,或者这样做

     NotificationCenter.default.addObserver(self, selector: #selector(keyShow), name:UIResponder.keyboardWillShowNotification, object: nil)
    
    } 
    @objc func keyShow ( _ not:NSNotification) {
    
        if shouldHideKeyB {
    
            self.view.endEditing(true)
    
            // show disabled message 
        }
    
    }
    

    其中shouldHideKeyB 是文本字段的当前状态

    【讨论】:

    • 这不是我想要的。如果我设置 isUserInteractionEnabled = false 那么键盘不会出现(就像它所需要的那样)。但是,我无法收到显示带有错误消息的视图的触摸。
    • @Pauli 不要将其设置为 isUserInteractionEnabled ,创建一个名为 shouldHideKeyB 的变量并像上面一样管理它
    【解决方案2】:

    您可以实现自己的isDisabled Bool 和UITextFieldDelegate 并实现func textFieldShouldBeginEditing(_ textField: UITextField) -> Bool,而不是使用isUserInteractionEnabled。当 isDisabled 为 true 时显示错误视图并返回 false,否则返回 true。在 isDisabled 的 didSet 中,您可以隐藏错误视图。

    从此方法返回 false 应该会阻止键盘弹出,并且仍然允许您与视图交互。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-03-18
      • 1970-01-01
      • 1970-01-01
      • 2012-06-14
      • 1970-01-01
      • 2023-03-07
      • 2017-05-17
      • 1970-01-01
      相关资源
      最近更新 更多