textFieldShouldBeginEditing 被错误的文本字段触发

Posted

技术标签:

【中文标题】textFieldShouldBeginEditing 被错误的文本字段触发【英文标题】:textFieldShouldBeginEditing being trigged by the wrong textfield 【发布时间】:2017-02-06 12:56:58 【问题描述】:

我有两个文本字段 dateNTextFieldprenomTextField 仅设置了 dateNTextField 的委托:

func textFieldShouldBeginEditing(_ textField: UITextField) -> Bool 
    if textField.tag == self.dateNTextField.tag 
        print(textField.tag)
        self.view.endEditing(true)
    
    return true

但是,即使两个文本字段具有不同的标签,我也会得到相同的结果! 任何帮助将不胜感激。

编辑:

override func viewDidLoad()
 
 self.dateNTextField.delegate = self
let tapGestureRecognizer = UITapGestureRecognizer(target:self, action:#selector(chooseImage(recognizer:)));
self.picker.delegate = self
profilImage.isUserInteractionEnabled = true
profilImage.addGestureRecognizer(tapGestureRecognizer)
tapGesture.cancelsTouchesInView = true
self.view.addGestureRecognizer(tapGesture)
tapGesture.delegate = self
self.dateNTextField.accessibilityIdentifier = "date"
self.prenomTextField.accessibilityIdentifier = "prenom"

【问题讨论】:

这会发生什么:if textField == self.dateNTextField ? 我得到了同样的结果。 基本上你想在用户点击dateNTextField时隐藏键盘? 是,或者用户在完成 prenomTextField 编辑后单击键盘上的下一步按钮。 看初始化代码会更好 【参考方案1】:

尝试将您的 return true 语句放入您的 if 条件中。

func textFieldShouldBeginEditing(_ textField: UITextField) -> Bool 
        if textField == self.dateNTextField
            self.view.endEditing(true)
            return true
        
        return false
    

【讨论】:

【参考方案2】:

看起来您的文本字段具有相同的标签。 尝试比较文本字段而不是标签

func textFieldShouldBeginEditing(_ textField: UITextField) -> Bool 
    if textField == self.dateNTextField
        self.view.endEditing(true)
    
    return true

【讨论】:

他们有不同的标签。而且我已经尝试过` if textField == self.dateNTextField` 但同样的事情 @OmarChaabouni 没有初始化代码,很难理解出了什么问题。另外,如果您不想将文本字段用作可编辑元素,为什么不使用 UILabel 呢? @OmarChaabouni 以上答案是完美的。因此,请确保您的两个 textField 都与委托绑定。 UILabel 如果打算永远不会被编辑,或者只是将编辑设置为 false 以避免这个函数一起运行,那么它会起作用 @EvgeniyGushchin 有时我们需要使用textField 而不是label 例如。他想在文本字段上触发一些事件确实开始了,所以他不会带标签,并且为了对称性,他有 5 个文本字段,用户可以在其中输入,一方面是不带标签。【参考方案3】:

您也可以设置标识符(例如dateNTextField.accessibilityIdentifier),而不是使用标签。

立即初始化两个文本字段并设置它们的标识符,然后通过它们的 ID 引用它们。

【讨论】:

【参考方案4】:

你应该使用这个而不是使用文本字段的标签:

func textFieldShouldBeginEditing(_ textField: UITextField) -> Bool 
    if textField == self.dateNTextField 
        print(textField.tag)
        self.view.endEditing(true)
    
    return true

它会为你工作。

【讨论】:

以上是关于textFieldShouldBeginEditing 被错误的文本字段触发的主要内容,如果未能解决你的问题,请参考以下文章