Load a UINavigationController as a subview from UIViewController
Solution 1
The NavigationController is designed to take over the screen when it's used, so you have to decide how to manage the transition to the NavigationController from your original ViewController. You can do this with presentModalViewController, or by handling removing your original view and swapping the NavigationController in programatically.
Here's the Apple documentation for setting up a NavigationController programatically.
The code is going to look something like this (from Apple's doc):
GroupsController *groupsController = [[[GroupsController alloc] initWithNibName:nil bundle:nil] autorelease];
UINavigationController *navigationController =
[[UINavigationController alloc] initWithRootViewController:groupsController];
Now, once you've created the NavigationController, and added its first viewcontroller to it, you need to transition to it. You can do that with CATransitions, or with
[myViewController presentModalViewController: navigationController];
Solution 2
You shouldn't add a UIViewController's (including navigation) view as a subview to a view managed by another view controller.
Here's a relevant read: http://blog.carbonfive.com/2011/03/09/abusing-uiviewcontrollers/
In your case, what you can do is remove the viewcontroller's view from the window, then add the navigation controller's view to the window.
[viewController.view removeFromSuperview];
[window addSubview:navigationController.view];
You can also add it as a modal view controller as was suggested here, or you can make the first view controller a navigation controller, and onto that navigation controller's stack, push the 2nd navigation controller:
[navigationController pushViewController:secondNavigation animated:NO];
Edit: heh just noticed I'm answering a 09 question
Edit #2: This may be irrelevant to iOS 5 and the UIViewController containment thing they've added, still hadn't a chance to check it out, but if you're reading this answer, you might wanna.
XcoderMi2
Updated on July 09, 2022Comments
-
XcoderMi2 almost 2 years
I am a newbi in iPhone development.I want to build an app which will have a UIViewController first , which will have a button.Now on clicking the button, it shud load a UINavigation controller. Here is how i m approaching :
i created a UIViewController class, where i took a
-(IBAction) PressMeFunc:(id) sender
for the button to be pressed.
Then i created a UIView xib file.I did the required steps in the IB.
Then in the AppDelegate, i added the ViewController's instance as a Subview of the window.
Upto this it is OK.
Next, how do i load a navigationcontroller on the press of the button?
I know how to build a navigationController project from window-based app, but i am having a tough time doing NavigationController as a subview of UIView.
Your help is much appreciated.
-
XcoderMi2 almost 15 yearsThank you Mark for your quick reply. I have downloaded the Apple doc that you have mentioned. I will go through it and try to load NavigationController from UIViewController;though i dont know what presentModalViewController is. Actually i want to load an xml in NavigationController on clicking a Button which is in UIViewController. regards, Xcodermi2
-
valexa over 13 yearsthis is a shame of Apple, there are a lot of issues unless you only add uinavigationcontroller's to the main window, they could have at least made a note in the docs