iOS - 检测我如何到达viewController

时间:2012-10-01 13:03:49

标签: iphone ios ipad

我有3个viewControllers按顺序出现,A - > B - > ç

A使用

调用B.
[self.navigationController pushViewController:controllerB animated:YES];

C通过

调用B.
[self.navigationController popViewControllerAnimated:YES];

有没有办法让B知道谁叫它A或C?

感谢。

5 个答案:

答案 0 :(得分:2)

您可以使用NavigationControllers viewControllers属性。查看导航堆栈中的项目。

  

根视图控制器位于数组中的索引0处,后视图控制器位于索引n-2处,顶部控制器位于索引n-1处,其中n是数组中的项目数。

您希望视图控制器位于索引n-2。

http://developer.apple.com/library/ios/#documentation/uikit/reference/UINavigationController_Class/Reference/Reference.html

编辑(已添加示例)

NSString *previousView = NSStringFromClass([[self.navigationController.viewControllers objectAtIndex:(self.navigationController.viewControllers.count - 2)] class]);
if([previousView isEqualToString:@"SettingsViewController"]){
     // Do something
}

答案 1 :(得分:1)

呀。

制作名为@property的{​​{1}} UIViewController(或任何您想要的)。当你推动它时,只需将它的属性设置为当前类。

答案 2 :(得分:0)

我可以想到的一种方法,我在重用视图控制器时使用的方法是在视图控制器上设置一个可以查询的属性。 Alloc / init您的视图控制器,设置您的属性(NSString或NSInteger),并推送视图。这样,您可以使用代码查询有关创建和推送视图的人的属性。

简单但有效。

答案 3 :(得分:0)

是的,您可以创建一些枚举,如ClassA和ClassC,并在推送或弹出时只指定枚举相应的值。

答案 4 :(得分:0)

如果B调用A, - (void)viewDidLoad {}方法将被调用,如果B从C调用该方法不应该调用,那么可以将变量全局放入,并在viewDidLoad()方法中赋值。当你按C时删除那个值,然后在viewWillAppear方法中,你知道它在哪里形成。