对于iOS,任何了解导航源的方法



有什么方法可以知道导航源吗?

例如,导航堆栈具有 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");
    }
}

相关内容

  • 没有找到相关文章

最新更新