iOS - 确定以前在UINavigationController中显示的UIViewController

时间:2012-02-10 17:16:17

标签: objective-c ios cocoa-touch uinavigationcontroller

我需要确定先前在UIViewController中显示的UINavigationController。我的导航深度为3级,在2级我需要确定我是否从第1级推进到此处,或者是否从第3级弹出这里。我怎样才能轻松完成?

3 个答案:

答案 0 :(得分:4)

实现UINavigationControllerDelegate方法:

 - (void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated

并查询它以找出当前显示的视图控制器:

 navigationController.topViewController

这是你来自的那个。

答案 1 :(得分:3)

您可以使用viewControllers属性查看整个UINavigationController堆栈。

int count = [navigationController.viewControllers count];

topController = [navigationController.viewControllers objectAtIndex:count - 1];
previousController = [navigationController.viewControllers objectAtIndex:count - 2];
//...
//...
rootController = [navigationController.viewControllers objectAtIndex: count - count];

答案 2 :(得分:2)

iOS 5.0添加了[UIViewController isMovingToParentViewController]。在viewWillAppearviewDidAppear期间,如果您来自编号较低的视图控制器YES,则会返回NO。遗憾的是,该名称令人困惑 - 你会认为[UIViewController isMovingFromParentViewController]是正确的调用方式。

但是,代表所有第二代设备都停留在iOS 4.2.1上的cheapskates,除非你真的需要,否则请不要使用iOS 5功能。