UITapGestureRecognizer для текстового поля не так, как ожидалось - PullRequest
0 голосов
/ 04 мая 2018

В моем классе у меня есть 11 UITapGestureRecognizer в массиве textViewRecognizer, прикрепленном к 11 из 100 UITextFields в массиве boxArray. При нажатии на текстовое поле, содержащее UIGestureRecognizer, он запускает tappedTextView, где я пытаюсь получить индекс первого респондента.

Однако из-за некоторого странного порядка в том, как все выполняется, функция действия дает мне только первого респондента из предыдущего первого респондента на тот, который только что был прослушан.

Кроме того, мне нужно дважды нажать, чтобы даже выделить текстовое поле, которое я собирался! Мне нужно использовать функцию касания, а не текстовые делегаты, так что это было настоящей головной болью.

У меня есть ...

    @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
            }
        }
    }
}

по моему мнению, у меня есть

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

В моем классе у меня

Я хочу установить 11 из 100 текстовых полей, чтобы иметь этот распознаватель касаний в зависимости от некоторых условий (здесь я просто собираюсь использовать обычный цикл for)

for i in 0...10 {
         boxArray[i]?.addGestureRecognizer(textFieldTapRecognizer[i])
}
  1. Могу ли я в любом случае получить его, чтобы дать мне фактического первого респондента, после того, как был сделан сигнал?

  2. Можно ли в любом случае обойти двойное касание, чтобы выбрать текстовое поле с UITapGesture?

Любая помощь очень ценится.

Отредактировано: правильно названные функции

Ответы [ 2 ]

0 голосов
/ 04 мая 2018

Я бы добавил Tag к своему UITextView и установил UITextViewDelegate к своему ViewController.

Тогда я бы добавил следующий метод Delegate:

func textViewShouldBeginEditing(_ textView: UITextView) -> Bool {
    print("Textview tag: ", textView.tag)
    return false
}
0 голосов
/ 04 мая 2018

Звучит так, будто вы хотите удалить поведение автоматического редактирования на UITextView. Вы можете получить больше контроля над этим с помощью метода textViewShouldBeginEditing(_ textView: UITextView) -> Bool UITextViewDelegate, задокументированного здесь .

Если вы вернете false для этого метода, вам не нужно будет дважды нажимать, чтобы добраться до вашего распознавателя жестов. В зависимости от вашего варианта использования, вы можете затем «разрешить» касанию перейти в текстовое представление, возвращая true для текстового представления, которое вы хотите отредактировать.

Хотя я не уверен на 100% в части первого респондента по вашему вопросу, так как textView не будет захватывать первого респондента, если он не запускает свой режим редактирования, это должно решить эту проблему, которую я считаю. Удачи!

...