ios делает панель навигации кликабельной

Просто пытаюсь сделать навигационную панель моего навигационного контроллера кликабельной. Хорошо работает с

UITapGestureRecognizer* tapRecon = [[UITapGestureRecognizer alloc]
                                    initWithTarget:self action:@selector(toggleMenu)];
tapRecon.delegate = self;
tapRecon.numberOfTapsRequired = 1;
[self.navigationBar addGestureRecognizer:tapRecon];

но когда у меня есть кнопка "Назад", невозможно нажать на нее (жест может занять кнопку).

Итак, я попробовал кое-что найти здесь:

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch
{
    return (![[[touch view] class] isSubclassOfClass:[UIButton class]]);
}

И ничего, потому что [touch view] всегда есть UINavigationBar...

Последнее, что я пытался сделать, это установить cancelsTouchesInView в NO, Все в порядке, мы можем нажать на кнопку назад, но toggleMenu действие UITapGestureRecognizer все еще называется.

У вас есть идея, чтобы кнопка возврата снова заработала, но не звонила toggleMenu в то же время?

Спасибо!

РЕДАКТИРОВАТЬ:

Жюст нашел, как это сделать:

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch
{
    for (UIView* sub in self.navigationBar.subviews) {
        NSString *cl = NSStringFromClass([sub class]);
        if ([cl isEqualToString:@"UINavigationItemButtonView"]) {
            CGRect bback = sub.frame;
            CGPoint pointInView = [touch locationInView:gestureRecognizer.view];
            return !CGRectContainsPoint(bback, pointInView);
        }
    }
    return YES;
}

2 ответа

Ну, вы можете сделать кнопку, которая окружает панель навигации, и сделать еще одну кнопку для нажатия назад. Обязательно расположите его сверху кнопки навигационной панели в IB

Это решение для кода Swift:

func gestureRecognizer(gestureRecognizer: UIGestureRecognizer, shouldReceiveTouch touch: UITouch) -> Bool {
    for view in self.navigationBar.subviews {
        if let button = view as? UIButton {
            if touch.view.isEqual(button) {
                return false
            }
        }
    }
    return true
}

Просто поместите это в ваш делегат для вашего UIGestureRecognizer,

Другие вопросы по тегам