双击UINavigationController navigationBar?

Bil*_*ill 3 iphone uitableview uinavigationcontroller

我在tableView中有一个带有长数据列表的应用程序,我想双击导航栏以在列表顶部(搜索所在位置)滚动UITableView.

我该如何实现呢?

谢谢你的帮助.

ton*_*lon 16

将tableView滚动到顶部的标准手势是在状态栏上单击一下.它默认启用,请参阅UIScrollView参考

如果你真的想要导航栏并且你的目标是3.2及以上,我建议将UITapGestureRecognizer附加到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];
}
Run Code Online (Sandbox Code Playgroud)

如果你的目标是3.0或更低,它可能会变得有点棘手,不推荐.

  • 我试图为单击添加一个点击识别器.这种方法只有在你没有后退按钮或rightBarButtonItem时才可行.他们的点击事件被手势识别器覆盖. (2认同)

小智 9

根据tonklon的回答,您可以通过获取子视图来区分navigationBar视图中的各个项目.

navigationBar的子视图是:

0左按钮,1标题,2右按钮,

而不是:

[navController.navigationBar addGestureRecognizer:tapRecon];
Run Code Online (Sandbox Code Playgroud)

为导航栏的标题执行此操作:

[[self.navigationController.navigationBar.subviews objectAtIndex:1] setUserInteractionEnabled:YES];
[[self.navigationController.navigationBar.subviews objectAtIndex:1] addGestureRecognizer:tapRecon];
Run Code Online (Sandbox Code Playgroud)