UITableview didSelectRowAtIndexPath заменяет жест двойного касания с помощью UITapGestureRecognizer - PullRequest
6 голосов
/ 15 сентября 2011

Я настроил UITableView с двойным касанием UITapGestureRecognizer.Но попытки двойного касания ячейки пользователем просто запускают didSelectRowAtIndexPath дважды.Должны ли эти два работать вместе?

(я знаю, что мог бы использовать распознаватель жестов одним касанием вместо встроенного поведения didSelectRowAtIndexPath, но вот проблема с этим: ячейка также имеетКнопка, которую я больше не могу нажимать, когда добавляю распознаватель жестов одним касанием. Также я видел примеры, когда пользователи SO встроили функцию двойного касания в didSelectRowAtIndexPath, но не слишком ли это хак?1003 *

Ответы [ 4 ]

11 голосов
/ 23 мая 2012

Более подробная информация об ответе Крис:

  • отменыTouchesInView
  • задержкиTouchesBegan
  • задержкиTouchesEnded

http://developer.apple.com/library/ios/#documentation/uikit/reference/UIGestureRecognizer_Class/Reference/Reference.html

В моем случае возникла проблема при добавлении 2 жестов касания к UIImageView, который был на пользовательском UITableViewCell.То, что произошло, было вызвано didSelectRowAtIndexPath: при нажатии / двойном нажатии на UIImageView.Когда у меня был только один жест касания, didSelectRowAtIndexPath: не вызывался (и для меня это было правильным поведением.

Чтобы предотвратить вызов didSelectRowAtIndexPath: при использовании двух жестов касания (одинарный / двойной)нажмите), я добавил этот код в первый жест касания (единственный):

tapGesture.cancelsTouchesInView = YES;
tapGesture.delaysTouchesBegan = YES;

После этого изменения нажатие / двойное нажатие на UIImageView (поверх пользовательской ячейки) невызвать didSelectRowAtIndexPath:

5 голосов
/ 15 сентября 2011

Похоже, что я могу получить didSelectRowAtIndexPath и распознаватель жестов двойным касанием для приятного совместного воспроизведения, используя свойства delaysTouchesBegan и cancellsTouchesInView распознавателя жестов.

Другая опция, описанная @MSgambel, похоже, работает одинаково хорошо.

1 голос
/ 16 ноября 2012

Я проверил метод delayTouchesBegan с двойными нажатиями, но обнаружил, что один прием, полученный таблицей, затем задерживается, что делает взаимодействие с таблицей менее отзывчивым для пользователя и, возможно, раздражает.немного пешеход, но я использую таймер для обнаружения отводов в методе didSelectRowAtIndexPath.Я записываю счетчик «1» для первого касания, и если пользователь не нажимает снова через 0,2 секунды, он отображает выбранный элемент.Если пользователь нажал в течение 0,2 секунд для счетчика «2», то я отображаю другой элемент (лист действий).Я каждый раз сбрасываю счетчик нажатий.

Этот метод использует больше кода, но обеспечивает быстрый ответ от интерфейса, и пользователю не нужно знать, что происходит за кулисами - только то, что пользовательский интерфейс реагирует.1005 *

1 голос
/ 15 сентября 2011

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

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