【发布时间】:2013-12-29 03:48:50
【问题描述】:
有什么办法知道导航来源?
例如,导航堆栈具有 A/B/C 三个视图控制器。 如果弹出C,当显示B时,有什么方法知道导航是从C到B吗?
非常感谢。
【问题讨论】:
标签: ios uiviewcontroller uinavigationcontroller navigation
有什么办法知道导航来源?
例如,导航堆栈具有 A/B/C 三个视图控制器。 如果弹出C,当显示B时,有什么方法知道导航是从C到B吗?
非常感谢。
【问题讨论】:
标签: ios uiviewcontroller uinavigationcontroller navigation
另一种简单的方法
首先在 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;
}
之后在你的第一个视图 controller.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 类中保留一个全局变量,并在弹出特定 viewController 时设置该变量。
在 cmets 之后更新: 在这种情况下,你可以使用 NSUserDefaults 或者你可以从 poppedViewController 发布一个 NSNotification 对象。虽然我不确定这些选项对您的使用效率如何。
【讨论】:
您可以判断一个控制器出现是因为它被添加到堆栈中,还是因为另一个控制器从堆栈中弹出使用 isMovingToParentViewController。如果你在 B 中有这段代码,它会告诉你发生了什么:
-(void)viewDidAppear:(BOOL)animated {
if ([self isMovingToParentViewController]) {
NSLog(@"Coming from A");
}else{
NSLog(@"Coming from C");
}
}
【讨论】: