文本字段上的UITapGestureRecognizer与预期不符

时间:2018-05-04 14:30:53

标签: ios swift uitextfield uitapgesturerecognizer

在我的课程中,我在一个数组textViewRecognizer中有11个UITapGestureRecognizer,附加到数组boxArray中的100个UITextField中的11个。当点击包含UIGestureRecognizer的Textfield时,它会运行tappedTextView,我尝试获取第一个响应者的索引。

然而,由于对事物执行方式的一些奇怪的排序,动作函数只给我前一个第一响应者的第一响应者到刚刚被点击的响应者。

另外,我必须双击甚至选择我想要的文本字段!我需要使用tap功能而不是文本代理,所以这真的很头疼。

我有......

    @objc func tappedTextField(_ sender: UITapGestureRecognizer) {
    for i in 0...99 {
        if (boxArray[i]?.isFirstResponder)! {
            if let index = boxArray.index(of: boxArray[i]) {
            print(index)
            break
            }
        }
    }
}

在我的viewDidLoad中我有

for i in 0...10 {
        textFieldTapRecognizer[i].addTarget(self, action: #selector(self.tappedTextField(_:)))
}

在我班上我有

我想在100个textFields中设置11个以根据某些条件设置一个tap识别器(我将在这里使用常规for循环)

for i in 0...10 {
         boxArray[i]?.addGestureRecognizer(textFieldTapRecognizer[i])
}
  1. 无论如何,在点击之后我能得到它给我实际的第一响应者吗?

  2. 是否有双击选择具有UITapGesture的文本字段?

  3. 非常感谢任何帮助。

    编辑:正确命名的函数

2 个答案:

答案 0 :(得分:0)

听起来您想删除UITextView上的自动编辑行为。您可以使用textViewShouldBeginEditing(_ textView: UITextView) -> Bool UITextViewDelegate方法documented here获取对此的更多控制权。

如果您为该方法返回false,则应避免需要双击才能进入手势识别器。根据您的使用情况,您可以"允许"通过返回true您想要实际编辑的textView来点击进入文本视图。

虽然我没有100%清楚你的问题的第一个响应者部分,因为如果没有启动它的编辑模式,textView将不会抓住第一响应者,这应该解决我相信的问题。祝你好运!

答案 1 :(得分:0)

我会在Tag添加UITextView并将UITextViewDelegate设置为ViewController

然后我将添加以下Delegate方法:

func textViewShouldBeginEditing(_ textView: UITextView) -> Bool {
    print("Textview tag: ", textView.tag)
    return false
}