2013-08-20 3 views
2

Просто пытайтесь сделать навигацию по моему навигационному контроллеру интерактивным. Он хорошо работает сios make navigation bar clickable

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. Все в порядке, мы можем нажать кнопку «Назад», но действие toggleMenuUITapGestureRecognizer по-прежнему вызывается.

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

Спасибо!

EDIT:

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

- (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; 
} 
+0

Кнопка возврата - это экземпляр UIBarButtonItem, который НЕ является подклассом UIView. Apple использует некоторые частные классы для отображения этих кнопок, и это должно быть причиной того, что ваш чек для сенсорного экрана не работает. –

ответ

0

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

+0

Я не использую IB. Как вы думаете, создав свои собственные кнопки, я могу принести их с shouldReceiveTouches? –

-2

Это решение для 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.

+0

Не уверен, почему я получаю от этого меньше. Код работает, и нет принятого решения (даже если он ответил на вопрос в своем вопросе). –