ios - UINavigationBar 中的点击事件被手势识别器覆盖

标签 ios uitableview uinavigationbar uigesturerecognizer

首先的问题是:

当你有一个 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/

相关文章:

ios - 动态文本字段未在 TableView didSelectRowAt 方法中缓存

swift - 使用 NavigationController 转到另一个 Storyboard

ios - 如何在导航栏中添加渐变-iOS

ios - 无法使用默认的 UINavigationController 后退按钮

ios - ObjectiveC 与 iOS 中对 %d 的不同处理

ios - CoreData 或 NSPredicate 是否像 sql 查询一样支持 COLLATE?如果是这样怎么办?

ios - 新表格 View 单元格显示为空白单元格

ios - 当进入结果 View 并返回时,带有 UISearchController 的 UITableView 进入导航栏下方

ios - 调整包含多个 View 的 iOS 表格 View 单元格的大小

ios - 类型 'ProfilesTableViewController' 不符合 Xcode 6 GM 种子中的协议(protocol) 'UITableViewDataSource'