#ios5 #uigesturerecognizer #uitapgesturerecognizer
#ios5 #uigesturerecognizer #uitapgesturerecognizer
Вопрос:
Я использую a UITapGestureRecognizer
уже довольно давно, чтобы замечать, когда происходит нажатие, и отображать другое представление. Я инициализирую его следующим образом:
_tapGestureRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(showModalDetailView:)];
В iOS 4.3 это сработало отлично. В iOS 5 -showModalDetailView:
больше не вызывается.
Мне было интересно, есть ли у кого-нибудь еще такая же проблема?
Обновить
Я настраиваю распознаватель следующим образом:
_tapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(showModalDetailView:)];
_tapGesture.numberOfTapsRequired = 1;
_tapGesture.numberOfTouchesRequired = 1;
_tapGesture.delegate = self;
[self addGestureRecognizer:_tapGesture];
Обновление 2
Ладно, теперь это становится странным. Код снова начинает работать, как только я отключаю настройку делегирования, комментируя ее. Однако методы делегирования все еще вызываются. Но не всегда.
Заголовок ячейки выровнен по левому краю, а подробный текст выровнен по правому краю. Когда вы нажимаете на подробный текст, он работает так, как ожидалось: метод делегирования не вызывается, и появляется всплывающее окно. Когда вы нажимаете на ячейку в другом месте, вызывается метод делегирования ( -gestureRecognizer:shouldReceiveTouch:
в данном случае) и появляется всплывающее окно.
Я не совсем понимаю, что здесь происходит.
Комментарии:
1. к чему вы подключаете этот распознаватель?
2. В
- (id)initWithStyle:reuseIdentifier:
пользовательскомUITableViewCell
подклассе.
Ответ №1:
Теперь, когда я реализую все три метода делегирования (хотя они необязательны), это работает. Просто возвращаю значения по умолчанию. Спасибо, Дункельштерн и Томас.
Комментарии:
1. Я сталкивался с подобными проблемами. Удаление строки настройки делегата исправило это, и именно тогда я понял, что с моей стороны было глупой ошибкой устанавливать делегат распознавателя, потому что у него нет пользовательского протокола с обратными вызовами. Добавления цели и селектора должно быть более чем достаточно. Что заставляет меня спросить вас, о каких трех методах делегирования вы говорите в своем ответе?
2. Sid, методы, которые я реализовал, были определены в
UIGestureRecognizerDelegate
. Мне нужно-gestureRecognizer:shouldReceiveTouch:
было определить, должно ли представление получать нажатие. Я использовал другой вид поверх него, который не должен вызывать событие при нажатии.3. О, хорошо, спасибо! Я искал UITapGestureRecognizerDelegate 🙂
Ответ №2:
Попробуйте явно установить numberOfTouchesRequired и numberOfTapsRequired равными 1. И, конечно, вам нужно вызвать addGestureRecognizer в вашем экземпляре View.