Search code examples
objective-cxcodenavigationcontrolleruiapplicationdelegate

referencing an instantiated object in another class in objective C


I am working in xcode on an ipod app in objective C, and I have a field (navigationController) in one of my classes (rootViewController). How do I reference the instantiated rootViewController's navigationController from another class? For example, how would I do this if I want to reference the navigationController from the FirstViewController.m class?

I seem to only be able to find references for this to reference the application delegate.

If I want to reference the application delegate with FirstViewController, I just say:

MyAppDelegate *delegate = [[UIApplication sharedApplication] delegate];

[delegate.navigationController pushViewController:childController animated:YES];

how do I do this for the rootViewController class instead of MyAppDelegate?


Solution

  • Based on the question you are asking, it seems that you want to call methods on the UINavigationController that is higher up in the stack. All UIViewControllers already have a property of navigationController which is the UINavigationController that is an ancestor to this ViewController on the stack.

    So if you had a RootViewController, called root, that at some point did this

    FirstViewController * first = [[FirstViewController alloc] initWithNibName:@"FirstView" bundle:nil];
    [self.navigationController pushViewController:first animated:YES];
    [first release];
    

    Then first.navigationController == root.navigationController

    So inside of first calling [self navigationController] will give you the same navigationController that first was pushed onto in the first place.