如何从AppDelegate获取navController。

时间:2012-04-06 06:17:30

标签: iphone objective-c ios uinavigationcontroller uiapplicationdelegate

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

在applicationDelegate.h中我们有:

UINavigationController *navController;

以下是applicationDelegate.m

- (void)applicationDidFinishLaunching:(UIApplication *)application {    

   [window addSubview: navController.view];
   [window makeKeyAndVisible];
}

无论如何从mainWindow获取navController:

UIWindow *mainWindow = [appDelegate window];

5 个答案:

答案 0 :(得分:17)

如果其他UIViewController包含在UINavigationController中,您只需调用:

UINavigationController *navController = self.navigationController;
来自UIViewController的

否则,您可以将UINavigationController设置为AppDelegate中的属性。

// AppDelegate.h
@property (nonatomic, strong) UINavigationController *navController;

然后访问appDelegate.navController

或者,您可以将UINavigationController设置为window的rootViewController:

[window setRootViewController:navController];

随时随地打电话:

UINavigationController *navController = window.rootViewController;

答案 1 :(得分:2)

您可以将navController设为属性

@property (nonatomic,strong) UINavigationController *navController;

然后只需从您的appdelegate

访问它
appDelegate.Controller

答案 2 :(得分:1)

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

在applicationDelegate.h中

@property (retain, nonatomic) UINavigationController *navController;

在applicationDelegate.m

@synthesize navController;

然后你可以使用以下代码来获取其他类中的navController(假设你的委托类是MyApplicationDelegate):

appDelegate = (MyApplicationDelegate*)[[UIApplication sharedApplication] delegate];
UINavigationController *navController = appDeleagte.navController

答案 3 :(得分:1)

不需要额外的属性,使用此宏定义几乎可以在应用程序的任何位置使用:

#define mainNavController (((AppDelegate*)[[UIApplication sharedApplication] delegate]).navController)

当您将宏放在源代码顶部或导入源代码的.h头文件中时,您可以开始使用mainNavController,就像它是一个局部变量一样。

例如:

[mainNavController pushViewController:myViewController animated:YES];

或者没有宏,直接在代码中:

AppDelegate *appDelegate = (AppDelegate*)[[UIApplication sharedApplication] delegate];
appDelegate.navController; // do something with the navController

您几乎可以在任何地方使用此代码,如果您在类中工作而无法直接访问ViewController,这将非常方便。

答案 4 :(得分:-1)

如果您是初学者和学习者,导航控制器将在整个应用程序中共享,这将只是准备应用程序视图控制器的“堆栈”,因此您可以在任何视图控制器中访问导航控制器(仅当已推送该控制器时)才能通过出来的应用程序。当您按下任何控制器时,它将添加到导航控制器的“堆栈”中。

您可以使用该viewcontroller本身的self对象访问导航控制器。

[self.navigationController pushViewController:detail animated:YES];

通过该链接将提供导航解剖学的完整知识。

http://developer.apple.com/library/ios/#documentation/WindowsViews/Conceptual/ViewControllerCatalog/Chapters/NavigationControllers.html