【发布时间】:2013-08-20 00:08:53
【问题描述】:
只是想让我的 navigationController 的 navigationBar 可以点击。 它适用于
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。没关系,我们可以点击返回按钮,但是UITapGestureRecognizer的toggleMenu动作还是被调用了。
您是否有让后退按钮再次起作用但不同时调用toggleMenu 的想法?
谢谢!
编辑:
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 使用一些私有类来显示这些按钮,这应该是您检查触摸视图失败的原因。
标签: ios objective-c navigationbar touches