7

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

在 applicationDelegate.h 我们有:

UINavigationController *navController;

以及 applicationDelegate.m 中的以下内容

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

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

无论如何从主窗口获取导航控制器:

UIWindow *mainWindow = [appDelegate window];
4

5 回答 5

18

如果这个其他 UIViewController 包含在 UINavigationController 中,您可以简单地调用:

UINavigationController *navController = self.navigationController;

从 UIViewController。

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

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

然后访问appDelegate.navController.

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

[window setRootViewController:navController];

并从任何地方拨打电话:

UINavigationController *navController = window.rootViewController;
于 2012-04-06T06:33:38.137 回答
2

您可以将 navController 设为属性

@property (nonatomic,strong) UINavigationController *navController;

然后只需从您的 appdelegate 访问它

appDelegate.Controller
于 2012-04-06T06:27:26.183 回答
1

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

在 applicationDelegate.h

@property (retain, nonatomic) UINavigationController *navController;

在 applicationDelegate.m

@synthesize navController;

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

appDelegate = (MyApplicationDelegate*)[[UIApplication sharedApplication] delegate];
UINavigationController *navController = appDeleagte.navController
于 2012-04-06T06:26:24.220 回答
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,这将非常方便。

于 2013-05-09T23:12:35.603 回答
-1

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

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

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

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

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

于 2012-04-06T06:27:43.433 回答