【问题标题】:textFieldShouldBeginEditing being trigged by the wrong textfieldtextFieldShouldBeginEditing 被错误的文本字段触发
【发布时间】: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 编辑后单击键盘上的下一步按钮。
  • 看初始化代码会更好

标签: ios iphone swift3 uitextfield


【解决方案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
      }
      

      它会为你工作。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-08-05
        • 2012-06-17
        • 2018-07-22
        • 2015-11-29
        • 2012-05-16
        • 2020-02-07
        • 1970-01-01
        相关资源
        最近更新 更多