Проблемы с использованием 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.