textFieldShouldBeginEditing 被错误的文本字段触发
Posted
技术标签:
【中文标题】textFieldShouldBeginEditing 被错误的文本字段触发【英文标题】:textFieldShouldBeginEditing being trigged by the wrong textfield 【发布时间】:2017-02-06 12:56:58 【问题描述】:我有两个文本字段 dateNTextField
和 prenomTextField
仅设置了 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 被错误的文本字段触发的主要内容,如果未能解决你的问题,请参考以下文章