UITableView как UIGestureRecognizerDelegate - PullRequest
0 голосов
/ 11 октября 2019

Я хотел бы расширить UITableView, добавив пользовательский UIPanGestureRecognizer:

extension UITableView {

   func addCustomPanGestureRecognizer() {
        let panGestureRecognizer = UIPanGestureRecognizer()
        panGestureRecognizer.delegate = self
        addGestureRecognizer(panGestureRecognizer)

        // some additional setup
        // ...
    }

}

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

extension UITableView: UIGestureRecognizerDelegate {

    func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWith otherGestureRecognizer: UIGestureRecognizer) -> Bool {
        return otherGestureRecognizer == self.panGestureRecognizer
    }

}

... но он вообще не вызывается, несмотря на делегирование tableView (как показано выше).

Кроме того, Xcode отображает предупреждение:

Метод экземпляра 'gestRecognizer (: shouldRecognizeSimralleluallyWith :)' почти соответствует необязательному требованию 'gestRecognizer (: shouldRecognizeSimrallelouslyWith :)' протокола 'UIGestureRecognizerDelegate'

Чтобы избавиться от предупреждения, япопытался добавить аннотацию @objc до определения метода, но безуспешно.

1 Ответ

0 голосов
/ 11 октября 2019

Оказывается, Xcode нужна была дополнительная помощь в поиске подходящего определения метода Objective-C. Чтобы добиться этого, я должен был предоставить подпись метода после @objc аннотации:

extension UITableView: UIGestureRecognizerDelegate {

    @objc(gestureRecognizer:shouldRecognizeSimultaneouslyWithGestureRecognizer:)
    func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWith otherGestureRecognizer: UIGestureRecognizer) -> Bool {
        return otherGestureRecognizer == self.panGestureRecognizer
    }

}

Предупреждение все еще отображается, но метод вызывается правильно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...