How to get navController from AppDelegate.
Solution 1
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;
Solution 2
You can make the navController a property
@property (nonatomic,strong) UINavigationController *navController;
Then just access it from your appdelegate
appDelegate.Controller
Solution 3
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
Solution 4
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.
ramo
Updated on July 09, 2022Comments
-
ramo almost 2 years
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];