关于iPhone:如何从AppDelegate获取navController。

How to get navController from AppDelegate.

我想知道如何在iPhone编程中从AppDelegate = [[UIApplication sharedApplication] delegate]获取navController。 例如,在我们引用AppDelegate的其他viewController中。

在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;

然后访问appDelegate.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,这将非常方便。


您可以将navController作为委托类的属性。示例如下:

在applicationDelegate.h中

1
@property (retain, nonatomic) UINavigationController *navController;

在applicationDelegate.m中

1
@synthesize navController;

那么您可以使用以下代码在其他类中获取navController(假设您的委托类为MyApplicationDelegate):

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