Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
402 views
in Technique[技术] by (71.8m points)

iphone - Programmatically build / navigate a Navigation Controller

Before:

My App is based on indepent view controllers. I can switch from one to another by replacing the root view controller on the application delegate:

ade.window.rootViewController = newController;

... and all worked right, till now.

Tomorrow:

we have to add a NavigationController-based part of our App, which will help the users navigate through our:

Brands => Model Names => Colors

So, the user will choose a color, then click a button: now I will switch to another UIViewController (call it "pippo"), which actually resides outside that navigation hierarchy (I can't push it in the nav-controller for several methods, I'm forced doing so!).

What I want is to get back to my "Color" screen, from "pippo". So, I'm looking for a way to programmatically "navigate" the navigation controller I restore, I mean:

  • I restore my navigation controller

  • now I'm on Brands, but I don't want my users to be here, I want to show them the last color they was on (I saved it in the preferences)

  • how can I simulate the selection of a known brand and model?

Thanks a lot.

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)

In applicationDidFinishLoading in App delegate:

UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:rootViewController];

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

That will instantiate the navigation controller and add it to the window as a view.

Now, in your rootViewController class (lets say its called FirstViewController) you can do this:

- (void)clickedAButton:(id)selector {
  SecondViewController *nextViewController = [[SecondViewController alloc] initWithNibName:nil bundle:nil];
  // and push it onto the 'navigation stack'
  [self.navigationController pushNavigationController:nextViewController animated:YES];
  // and release
  [nextViewController release];
}

And in your SecondViewController you can navigate back through the stack using:

- (void)clickedAnotherButton:(id)selector {
  // goes back to the last view controller in the stack
  [self.navigationController popViewControllerAnimated:YES];
}

So for you it would go:

Set up navigation controller in the app delegate with Brand as the root view controller User chooses their brand and you pushViewController:animated: the Model view controller. Then the user chooses their model and you pushViewController:animated: the Color view controller. Similarly the user chooses a color and you push the Pippo view controller. Now, if the user presses back (or you call popViewControllerAnimated:) it will go back to the Color view controller in the same state as when the user left it to go to the Pippo controller.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
...