Ответ 1
Попробуйте это в представлении, в котором вы добавляете распознаватели жестов:
view.userInteractionEnabled = YES;
У меня есть приложение, которое отображает страницу текста с возможностью нажатия кнопки или прокрутки в режиме просмотра или отступления на разных страницах. В окне контейнера имеется два UISwipeGestureRecognizers, для прокрутки влево и прокрутка вправо. Никаких проблем с этими жестами. Но теперь я пытаюсь добавить UITapGestureRecognizer в другое представление, предоставляя возможность, похожую на iBooks или приложение Kindle, нажимать налево, чтобы вернуться, право идти вперед. Ничто из того, что я делаю, не может заставить огонь стрелять. Нет намека на то, что он когда-либо срабатывает, даже если я помещу жест в мой верхний вид и отключу другие жесты.
Контроллер представления реализует UIGestureRecognizerDelegate, хотя мне не нужно реализовывать методы делегирования. Я попытался реализовать shouldReceiveTouch: без успеха.
Вот фрагмент кода, в котором я создаю и присоединяю распознаватель жестов:
UITapGestureRecognizer *recognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapGestureTurnPage:)];
[self.view addGestureRecognizer:recognizer];
[recognizer release];
Попробуйте это в представлении, в котором вы добавляете распознаватели жестов:
view.userInteractionEnabled = YES;
Вы упомянули, что вы пробовали это, но на всякий случай пропустите его снова.
Попробуйте использовать делегат с <UIGestureRecognizerDelegate>
в заголовке, а затем установите делегат:
UITapGestureRecognizer *recognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapGestureTurnPage:)];
[self.view addGestureRecognizer:recognizer];
recognizer.delegate = self;
[recognizer release];
Затем реализуем этот метод:
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer
shouldReceiveTouch:(UITouch *)touch {
return YES;
}
Затем используйте отладчик или переместите NSLog
в указанный выше метод, а также tapGestureTurnPage:
, чтобы узнать, вызываются ли эти методы.
Добавьте это, где вы инициализируете жест:
recognizer.delegate = self;
и добавьте это в класс "self":
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer
{
return YES;
}
Это позволяет мне распознавать жесты в UIWebView, а UIWebView по-прежнему будет реагировать на краны. (который я хотел - вы не можете)