当我按下iPhone应用程序中的后退按钮时,有什么方法可以捕获事件?现在我正在使用一个名为Back的图像按钮并为其定义动作。
我的客户端需要指向上一屏幕的默认后退按钮,因此根据点击事件,我应该能够指向特定屏幕,以便显示该屏幕的标题。
总之,我需要后退按钮来显示我需要的标题,是否可能?
提前致谢。
答案 0 :(得分:6)
UINavigationBarDelegate
可能是您在处理– navigationBar:didPopItem:
消息时检测按钮是否被按下的最接近的位置。
当按下后退按钮或代码弹出导航控制器堆栈本身的视图时,将调用此方法。如果您的代码是手动弹出视图,那么设置一个标志来指示代码何时启动弹出窗口应该是微不足道的,因此您可以确定何时触发后退按钮
在你的UINavigationBarDelegate实现中创建一个布尔属性,例如poppedInCode
,你可以在代码执行pop之前设置为true,并实现委托,如:
- (void) navigationBar:(UINavigationBar *)navigationBar didPopItem:(UINavigationItem *)item
{
if (!self.poppedInCode) {
// back button was tapped
}
// set to false ready for the next pop
self.poppedInCode = FALSE;
}
这比目前接受的答案更有优势,因为它不需要对Apple的文档说您不应该进行子类化的组件的子类化。它还保留了内置后退按钮的所有行为,而无需重写它。
答案 1 :(得分:3)
有两种方法可以做到这一点:
自己实施后退按钮并拨打UINavigationController
的{{1}}
子类- (UIViewController *)popViewControllerAnimated:(BOOL)animated
并实施UINavigationController
进行处理并将调用传递给- (UIViewController *)popViewControllerAnimated:(BOOL)animated
。
正如另一个回答super
中所建议的那样,如果您处理UINavigationBarDelegate
消息,则可以检测按钮是否已被按下。
答案 2 :(得分:2)
您可以在viewWillDisappear:
方法中执行代码,并在viewWillAppear
中放置标记bBackClicked = true,如果从当前视图控制器中推送任何其他控制器,则将标记bBackClicked设置为false。
答案 3 :(得分:1)
此方法比其他方法简单。此方法的一个优点是您不需要使用委托方法不必要地使代码复杂化。如果您已经拥有UINavigationController
的委托,则此方法也更容易实现,因为它一次只能有一个委托引用。
-(void)viewWillDisappear:(BOOL)animated {
if ([self.navigationController.viewControllers indexOfObject:self] == NSNotFound) {
// 'Back' button was pressed. We know this is true because self is no longer
// in the navigation stack.
}
[super viewWillDisappear:animated];
}