Жест не распознается во всех ячейках TableView - PullRequest
0 голосов
/ 27 апреля 2020

Хорошо, это может быть немного трудно проиллюстрировать, но вот в чем проблема: я попытался подключить распознаватель жестов длинным нажатием к ячейке tableView и связал его с Viewcontroller. Но этот жест работает не для каждой ячейки таблицы - только 1. И 1 ячейка, в которой он работает, изменяется (иногда это первая, иногда вторая и т. Д. c - зависит от того, сколько ячеек действительно имеет данные) , Если кто-нибудь может указать мне правильное направление, это будет очень ценно.

Ниже приведен код для обработки жеста. Спасибо!

        if recognizer.state == .changed
        {
            let alertController = UIAlertController(title: nil, message:
                "Open Product in Safari", preferredStyle: .alert)
            let indexPath = tableView.indexPathForSelectedRow
            let itemSku = self.itemArray[indexPath?.row ?? 0].sku
            alertController.addAction(UIAlertAction(title: "Go to Safari", style: .default,handler: { action in
                UIApplication.shared.open(URL(string: "\(itemURL)\(itemSku ?? "")") ?? URL(string: "")!, options: [:]) { _ in
                print("Link opened")
            }
        }))

        present(alertController, animated: true, completion: nil)
    }

}

1 Ответ

0 голосов
/ 27 апреля 2020

Поскольку вы не опубликовали ни одного кода, связанного с вашей проблемой, лучше всего предположить:

Распознаватели жестов, такие как UILongPressGestureRecognizer, представляют собой отдельные экземпляры. Они могут быть добавлены только к одному объекту за раз. Если вы попытаетесь добавить его к нескольким объектам, он будет «существовать» только в последнем.

Возможно, вы создали один распознаватель жестов, а затем пытались добавить его в каждую ячейку.

Предполагая, что вы используете пользовательский класс ячейки, вы, вероятно, хотите создать экземпляр UILongPressGestureRecognizer внутри кода инициализации ячейки и добавить его к себе (или self.contentView или любой другой вид, который вы хотите отреагировать на жест). Также установите для своей цели забавный c в своем классе клеток. Когда это срабатывает, используйте закрытие «обратного вызова» или шаблон протокола / делегата, чтобы сообщить контроллеру, что произошел жест.

...