首页 文章

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

提问于
浏览
2

在我的课程中,我在一个数组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])
}
  • 无论如何,在制作水龙头之后,我能得到它给我实际的第一响应者吗?

  • 无论如何都要绕过双击以选择具有UITapGesture的文本字段?

任何帮助是极大的赞赏 .

编辑:正确命名的功能

2 回答

  • 0

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

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

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

  • 0

    我会将 Tag 添加到我的 UITextView 并将 UITextViewDelegate 设置为我的 ViewController .

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

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

相关问题