也许这个答案并不符合你的问题标题所描述的,但它有助于你了解何时点击了UINavigationBar
上的后退按钮。
在这种情况下,您可以使用UINavigationBarDelegate
协议并实现其中一个方法:
- (BOOL)navigationBar:(UINavigationBar *)navigationBar shouldPopItem:(UINavigationItem *)item;
- (void)navigationBar:(UINavigationBar *)navigationBar didPopItem:(UINavigationItem *)item;
当调用didPopItem
方法时,这是因为你要么点击了后退按钮,要么使用了[UINavigationBar popNavigationItemAnimated:]
方法,导航栏弹出了该项。
现在,如果您想知道是什么操作触发了didPopItem
方法,您可以使用标志。
通过这种方法,我不需要手动添加带有箭头图像的左栏按钮项目,以使其类似于iOS返回按钮,并能够设置自定义目标/操作。
让我们看一个例子:
我有一个视图控制器,其中包含一个页面视图控制器和自定义页面指示器视图。我还使用自定义UINavigationBar显示标题以了解我所在的页面以及返回到上一页的后退按钮。我还可以在页面控制器上向前/向后滑动页面。
#pragma mark - UIPageViewController Delegate Methods
- (void)pageViewController:(UIPageViewController *)pageViewController didFinishAnimating:(BOOL)finished previousViewControllers:(NSArray *)previousViewControllers transitionCompleted:(BOOL)completed {
if( completed ) {
if( currentIndex > lastIndex ) {
UINavigationItem *navigationItem = [[UINavigationItem alloc] initWithTitle:@"Some page title"];
[[_someViewController navigationBar] pushNavigationItem:navigationItem animated:YES];
[[_someViewController pageControl] setCurrentPage:currentIndex];
} else {
_autoPop = YES;
[[_someViewController navigationBar] popNavigationItemAnimated:YES];
[[_someViewController pageControl] setCurrentPage:currentIndex];
}
}
}
然后我实现了UINavigationBar代理方法:
#pragma mark - UINavigationBar Delegate Methods
- (BOOL)navigationBar:(UINavigationBar *)navigationBar shouldPopItem:(UINavigationItem *)item {
if( !_autoPop ) {
} else {
}
_autoPop = NO;
return YES;
}
在这种情况下,我使用了
shouldPopItem
,因为弹出是带有动画效果的,我想立即处理返回按钮而不必等到过渡结束。
UINavigationControllerDelegate
上的方法。 - Mike Weller