How to get navController from AppDelegate.

2019-03-28 13:30发布

I am wondering, that how to get navController from AppDelegate = [[UIApplication sharedApplication] delegate] in the iPhone programming. e.g., in other viewController where we reference to the AppDelegate.

In the applicationDelegate.h we have:

UINavigationController *navController;

And the following in applicationDelegate.m

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

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

Is there anyway to get the navController from the mainWindow:

UIWindow *mainWindow = [appDelegate window];

5条回答
爷、活的狠高调
2楼-- · 2019-03-28 14:03

If this other UIViewController is contained in the UINavigationController, you can simply call:

UINavigationController *navController = self.navigationController;

from the UIViewController.

Otherwise, you can set UINavigationController as a property in the AppDelegate.

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

Then access appDelegate.navController.

Or, you can set the UINavigationController as window's rootViewController:

[window setRootViewController:navController];

And call from anywhere:

UINavigationController *navController = window.rootViewController;
查看更多
劫难
3楼-- · 2019-03-28 14:04

You can make the navController a property

@property (nonatomic,strong) UINavigationController *navController;

Then just access it from your appdelegate

appDelegate.Controller
查看更多
▲ chillily
4楼-- · 2019-03-28 14:08

You can make the navController as a property of your delegate class. sample below:

In applicationDelegate.h

@property (retain, nonatomic) UINavigationController *navController;

In applicationDelegate.m

@synthesize navController;

then you can use the following code to get the navController in other classes (Assume your delegate class is MyApplicationDelegate):

appDelegate = (MyApplicationDelegate*)[[UIApplication sharedApplication] delegate];
UINavigationController *navController = appDeleagte.navController
查看更多
三岁会撩人
5楼-- · 2019-03-28 14:08

If you are beginer and learner, the navigation controller is shared in whole application which will just prepare the "stack" of your app's viewcontrollers, so you can access the navigationcontroller in any viewcontroller(Only if that controller has been pushed) through out the app. When you push any controller it will added to the "stack" of navigation controller.

You can access the navigation controller with the self object of that viewcontroller itself.

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

Go through with the link will give complete knowledge of navigation anatomy.

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

查看更多
\"骚年 ilove
6楼-- · 2019-03-28 14:13

No extra properties needed, available almost anywhere in your application using this macro definition:

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

When you put the macro at the top of your source or in a .h header file that you import into your source, then you can start using mainNavController as if it were a local variable.

For example:

[mainNavController pushViewController:myViewController animated:YES];

Or without the macro, directly in code:

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

You can use this code almost anywhere, which is handy if you're working inside a class and you can't access a ViewController directly.

查看更多
登录 后发表回答