我有 3 个按顺序出现的 viewController,A -> B -> C
A 调用 B 使用
[self.navigationController pushViewController:controllerB animated:YES];
C调用B
[self.navigationController popViewControllerAnimated:YES];
有没有办法让 B 知道是谁叫它的,A 还是 C?
谢谢。
您可以使用 NavigationControllers viewControllers 属性。查看导航堆栈中的项目。
根视图控制器在数组中的索引 0 处,后视图控制器在索引 n-2 处,顶部控制器在索引 n-1 处,其中 n 是数组中的项目数。
您想要索引 n-2 处的视图控制器。
编辑(添加示例)
NSString *previousView = NSStringFromClass([[self.navigationController.viewControllers objectAtIndex:(self.navigationController.viewControllers.count - 2)] class]);
if([previousView isEqualToString:@"SettingsViewController"]){
// Do something
}
是的。
制作一个名为(或任何你想要的)@property
的类型。当你推送它时,只需将它的属性设置为当前类。UIViewController
comingFrom
当我重用视图控制器时,我能想到的一种方法是在视图控制器上设置一个可以查询的属性。分配/初始化您的视图控制器,设置您的属性(NSString 或 NSInteger),然后推送视图。这样,您可以使用代码来查询该属性的创建者和推送者。
简单,但有效。
是的,您可以创建一些枚举,例如 ClassA 和 ClassC,并在推送或弹出时只为该枚举分配相应的值。
如果 B 从 A 调用,-(void)viewDidLoad{} 方法将被调用,如果 B 从 C 调用该方法不应该调用,因此您可以全局放置变量,并在 viewDidLoad() 方法中分配一些值。并在您按下 C 时删除该值,然后在 viewWillAppear 方法中您知道它在哪里。