有什么方法可以知道导航源吗?
例如,导航堆栈具有 A/B/C 三个视图控制器。如果弹出 C,当显示 B 时,有什么方法可以知道导航是从 C 到 B ?
提前非常感谢。
另一个简单的方法
首先在 Appdelegate.m 中声明 UINavigationController
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
// Override point for customization after application launch.
self.viewController = [[ViewController alloc] initWithNibName:@"ViewController" bundle:nil];
UINavigationController *nav=[[UINavigationController alloc]initWithRootViewController:self.viewController];
self.window.rootViewController = nav;
[nav setNavigationBarHidden:YES];
[self.window makeKeyAndVisible];
return YES;
}
之后,在您的第一个视图控制器.m 中导入第二个视图控制器头文件
#import "B.h"
在按钮操作中
- (IBAction)butvie:(id)sender {
B*tab=[[Balloc]init];
[self.navigationController pushViewController:tab
animated:YES];
}
在 C 视图中控制器来到 B 的后面
- (IBAction)butvie:(id)sender {
[self.navigationController popViewController
animated:YES];
}
您可以手动跟踪。您可以在 AppDelegate 类中保留一个全局变量,并在弹出特定视图控制器时设置该变量。
评论后更新:在这种情况下,您可以使用 NSUserDefaults,也可以从弹出的 ViewController 发布 NSNotification 对象。虽然我不确定这些选项对您来说有多大效率。
您可以判断控制器的出现是因为该控制器已添加到堆栈中,还是因为使用 isMovingToParentViewController 从堆栈中弹出了另一个控制器。如果你在 B 中有这段代码,它会告诉你发生了什么:
-(void)viewDidAppear:(BOOL)animated {
if ([self isMovingToParentViewController]) {
NSLog(@"Coming from A");
}else{
NSLog(@"Coming from C");
}
}