цель UITapGestureRecognizer больше не вызывается под iOS 5

#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.