0

我有 3 个按顺序出现的 viewController,A -> B -> C

A 调用 B 使用

[self.navigationController pushViewController:controllerB animated:YES];

C调用B

[self.navigationController popViewControllerAnimated:YES];

有没有办法让 B 知道是谁叫它的,A 还是 C?

谢谢。

4

5 回答 5

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
}
于 2012-10-01T13:07:32.487 回答
1

是的。

制作一个名为(或任何你想要的)@property的类型。当你推送它时,只需将它的属性设置为当前类。UIViewControllercomingFrom

于 2012-10-01T13:07:12.680 回答
0

当我重用视图控制器时,我能想到的一种方法是在视图控制器上设置一个可以查询的属性。分配/初始化您的视图控制器,设置您的属性(NSString 或 NSInteger),然后推送视图。这样,您可以使用代码来查询该属性的创建者和推送者。

简单,但有效。

于 2012-10-01T13:07:47.867 回答
0

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

于 2012-10-01T13:08:40.563 回答
0

如果 B 从 A 调用,-(void)viewDidLoad{} 方法将被调用,如果 B 从 C 调用该方法不应该调用,因此您可以全局放置变量,并在 viewDidLoad() 方法中分配一些值。并在您按下 C 时删除该值,然后在 viewWillAppear 方法中您知道它在哪里。

于 2012-10-01T13:26:13.417 回答