iphone应用程序中的反向导航
当我在iPhone应用程序中按下后退按钮时,有什么方法可以捕捉到事件吗?现在,我正在使用一个按钮,上面有一个名为Back的图像,并定义了相应的操作 我的客户端需要默认的返回按钮指向上一个屏幕,所以基于点击事件,我应该能够使它指向特定的屏幕,以便显示该屏幕的标题 简而言之,我需要后退按钮来显示我需要的标题,可以吗iphone应用程序中的反向导航,iphone,objective-c,xcode,uinavigationcontroller,back-button,Iphone,Objective C,Xcode,Uinavigationcontroller,Back Button,当我在iPhone应用程序中按下后退按钮时,有什么方法可以捕捉到事件吗?现在,我正在使用一个按钮,上面有一个名为Back的图像,并定义了相应的操作 我的客户端需要默认的返回按钮指向上一个屏幕,所以基于点击事件,我应该能够使它指向特定的屏幕,以便显示该屏幕的标题 简而言之,我需要后退按钮来显示我需要的标题,可以吗 提前感谢。有两种方法可以做到这一点: 自己执行后退按钮,并调用UINavigationController的-(UIViewController*)popViewControllerAn
提前感谢。有两种方法可以做到这一点:
UINavigationController
的-(UIViewController*)popViewControllerAnimated:(BOOL)animated
UINavigationController
并实现-(UIViewController*)popViewControllerAnimated:(BOOL)animated
,以进行处理并将调用传递给super
UINavigationBarDelegate
中所建议的,如果您处理–导航栏:didPopItem:
消息,您可以检测按钮是否已按下您可以在
视图中执行代码将消失:
方法,并在视图中将出现标记bBackClicked=true
,如果您从当前视图控制器中推送任何其他控制器,put flag bBackClicked=false。UINavigationBarDelegate
可能是处理–导航栏: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;
}
与目前公认的答案相比,这有一个优势,即它不需要对苹果文档中说不应该进行子类化的组件进行子类化。它还保留了内置后退按钮的所有行为,而无需重写。此方法比提供的其他方法更简单。这种方法的一个优点是不需要用委托方法使代码变得不必要的复杂。如果您已经有了
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];
}
UINavigationController的文档不鼓励您进行子类化,因此我不推荐选项2实现后退按钮本身意味着使用带有后退图像的按钮,并定义该按钮单击事件的操作?如果是这样的话,我将在当前场景中的代码中执行上述操作。