How to get navController from AppDelegate.
我想知道如何在iPhone编程中从
在applicationDelegate.h中,我们有:
1 | UINavigationController *navController; |
以及以下applicationDelegate.m
1 2 3 4 5 | - (void)applicationDidFinishLaunching:(UIApplication *)application { [window addSubview: navController.view]; [window makeKeyAndVisible]; } |
无论如何,要从mainWindow获取navController:
1 | UIWindow *mainWindow = [appDelegate window]; |
如果此其他UIViewController包含在UINavigationController中,则可以简单地调用:
1 | UINavigationController *navController = self.navigationController; |
从UIViewController。
否则,您可以将UINavigationController设置为AppDelegate中的属性。
1 2 | // AppDelegate.h @property (nonatomic, strong) UINavigationController *navController; |
然后访问
或者,您可以将UINavigationController设置为窗口的rootViewController:
1 | [window setRootViewController:navController]; |
并从任何地方致电:
1 | UINavigationController *navController = window.rootViewController; |
您可以将navController设置为属性
1 | @property (nonatomic,strong) UINavigationController *navController; |
然后只需从您的appdelegate访问它
1 | appDelegate.Controller |
不需要额外的属性,使用此宏定义可以在您的应用程序中的几乎任何地方提供这些属性:
1 | #define mainNavController (((AppDelegate*)[[UIApplication sharedApplication] delegate]).navController) |
将宏放在源的顶部或导入到源中的.h头文件中时,就可以开始使用mainNavController,就好像它是本地变量一样。
例如:
1 | [mainNavController pushViewController:myViewController animated:YES]; |
或没有宏,直接在代码中:
1 2 | AppDelegate *appDelegate = (AppDelegate*)[[UIApplication sharedApplication] delegate]; appDelegate.navController; // do something with the navController |
您几乎可以在任何地方使用此代码,如果您在类内部工作并且无法直接访问ViewController,这将非常方便。
您可以将
在applicationDelegate.h中
1 | @property (retain, nonatomic) UINavigationController *navController; |
在applicationDelegate.m中
1 | @synthesize navController; |
那么您可以使用以下代码在其他类中获取navController(假设您的委托类为
1 2 | appDelegate = (MyApplicationDelegate*)[[UIApplication sharedApplication] delegate]; UINavigationController *navController = appDeleagte.navController |
如果您是初学者和学习者,则导航控制器将在整个应用程序中共享,这将仅准备应用程序的视图控制器的"堆栈",因此您可以在整个应用程序中的任何视图控制器中访问导航控制器(仅当该控制器已被推入) 。当您按下任何控制器时,它将添加到导航控制器的"堆栈"中。
您可以使用该viewcontroller本身的self对象访问导航控制器。
1 | [self.navigationController pushViewController:detail animated:YES]; |
通过该链接将获得完整的导航解剖知识。
http://developer.apple.com/library/ios/#documentation/WindowsViews/Conceptual/ViewControllerCatalog/Chapters/NavigationControllers.html