首先的问题是:
当你有一个 tableView 如何实现用户可以点击 NavigationBar 一直滚动到顶部。
解决方案:
- (void)viewDidLoad {
UITapGestureRecognizer* tapRecon = [[UITapGestureRecognizer alloc]
initWithTarget:self action:@selector(navigationBarDoubleTap:)];
tapRecon.numberOfTapsRequired = 2;
[navController.navigationBar addGestureRecognizer:tapRecon];
[tapRecon release];
}
- (void)navigationBarDoubleTap:(UIGestureRecognizer*)recognizer {
[tableView setContentOffset:CGPointMake(0,0) animated:YES];
}
这就像一个魅力!
但是Drarok指出了一个问题:
此方法仅在您没有后退按钮或 rightBarButtonItem 时才可行。他们的点击事件被手势识别器覆盖
我的问题:
我怎样才能拥有我的 NavigationBar 可点击但仍然能够在我的应用程序中使用后退按钮的好功能?
所以要么找到一个不会覆盖后退按钮的不同解决方案,要么找到一个解决方案让后退按钮恢复正常:)
最佳答案
我没有使用位置 View ,而是通过检查 UITouch 的类解决了这个问题。
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch
{
return (![[[touch view] class] isSubclassOfClass:[UIControl class]]);
}
请注意,导航按钮的类型为 UINavigationButton
,它未公开,因此需要进行子类检查。
此方法位于您指定为手势识别器委托(delegate)的类中。如果您刚刚开始使用手势识别器,请注意委托(delegate) 与目标 分开设置。
关于ios - UINavigationBar 中的点击事件被手势识别器覆盖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7773189/