How to get navController from AppDelegate.

29,381

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.

Share:
29,381
ramo
Author by

ramo

Updated on July 09, 2022

Comments

  • ramo
    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];