我想知道如何在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];
答案 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];
通过该链接将提供导航解剖学的完整知识。