Проблемы с использованием UITapGestureRecognizers в Интерфейсном Разработчике - PullRequest
11 голосов
/ 13 декабря 2011

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

Outlook Collections
gestureRecognizers - Tap Gesture Recognizer (!)

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

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

Ответы [ 7 ]

4 голосов
/ 17 ноября 2012

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

4 голосов
/ 03 июля 2012

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

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

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

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

enter image description here

enter image description here

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

2 голосов
/ 15 апреля 2016

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

1 голос
/ 30 мая 2012

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

Вид загружен ...

//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
}

Может быть, вы могли бы адаптировать это.

Плазма

1 голос
/ 23 мая 2012

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

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

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

0 голосов
/ 18 июня 2012

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

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

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

0 голосов
/ 12 января 2012

Взгляните на это .

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

...