Проблемы с использованием UITapGestureRecognizers в интерфейсе Builder

Я пытаюсь использовать объект UITapGestureRecognizer, который можно найти в Интерфейсном Разработчике. Я перетащил один "UITapGestureRecognizer" из библиотеки объектов в один xib представления. Затем я создаю метод IBAction из этого жеста касания, для простого теста, я просто печатаю сообщение "NSLog" на консоль, как только касание в представлении. Я запустил это, и метод tap не вызывается. Я щелкаю правой кнопкой мыши по представлению в IB и замечаю, что есть предупреждение "!" на представлении "Аутлет коллекции" я вижу:

Outlet Collections
gestureRecognizers - Tap Gesture Recognizer (!)

Предупреждение гласит: UIView does not have an outlet collection named gestureRecognizers.

Что мне нужно сделать, чтобы исправить это?

Ответ 1

Я думаю, что вы неправильно подключили UITapGestureRecognizer к своему коду.

Когда вы опускаете UITapGestureRecognizer на свою сибу, Xcode автоматически делает необходимые ссылки на выходные соединения.

Вам нужно только создать метод IBAction в своем коде и затем подключить его к селектору U ITapGestureRecognizer, помещенному в xib.

Я приложил скриншоты для вашей ссылки.

enter image description here

enter image description here

Надеюсь это поможет!!

Ответ 2

Решение Mr.Anonymous верное. Нет необходимости реализовывать делегат в контроллере представления или устанавливать его. Однако вы должны проверить, что включено взаимодействие с пользователем (в окне свойств справа), особенно если вы прикрепляете распознаватель к метке.

Ответ 3

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

Ответ 4

Две вещи, которые нужно проверить: реализует ли ваш контроллер представления (тот, который содержит UIView) протокол UIGestureRecognizerDelegate?

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

Я делаю это, и я не получаю никаких ошибок (IOS 5.1, xCode 4.3).

Ответ 5

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

В поле зрения была загружена...

//Add double tap gesture to Navbar
UITapGestureRecognizer* tapRecon = [[UITapGestureRecognizer alloc]
                                    initWithTarget:self action:@selector(navigationBarDoubleTap:)];
tapRecon.numberOfTapsRequired = 2;
[self.navigationController.navigationBar addGestureRecognizer:tapRecon];

Тогда у меня есть метод...

#pragma mark - Auto Refresh Method
- (void)navigationBarDoubleTap:(UIGestureRecognizer*)recognizer {
      //Do Stuff Here
}

Возможно, вы могли бы адаптировать это.

Плазма

Ответ 6

Посмотрите это.

В частности, снимок экрана настройки выхода. Надеюсь, это поможет.

Ответ 7

Предупреждение не должно быть проблемой. Это только потому, что вы можете добавить несколько распознавателей жестов в коллекцию IBOutlet, но это не требуется.

Включите зомби в вашей схеме, чтобы получить лучшие сообщения об ошибках во время отладки. В моем случае контроллер View, с которым я пытался связаться с моим обработчиком жестов, не был создан в Interface Builder.

Кроме того, нет необходимости реализовывать протокол делегатов, и он будет работать на любом UIView.