Просто пытайтесь сделать навигацию по моему навигационному контроллеру интерактивным. Он хорошо работает с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
. Все в порядке, мы можем нажать кнопку «Назад», но действие toggleMenu
UITapGestureRecognizer
по-прежнему вызывается.
У вас есть идея, что кнопка возврата снова работает, но не вызывает 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;
}
Кнопка возврата - это экземпляр UIBarButtonItem, который НЕ является подклассом UIView. Apple использует некоторые частные классы для отображения этих кнопок, и это должно быть причиной того, что ваш чек для сенсорного экрана не работает. –