IOS 7 Study - Implementing Navigation with UINavigationController
Problem
You would like to allow your users to move from one view controller to the other with
a smooth and built-in animation.
Solution
Use an instance of UINavigationController.
What it's like
If you’ve used an iPhone, iPod Touch, or iPad before, chances are that you have already
seen a navigation controller in action. For instance, if you go to the Settings app on your
phone and then press an option such as Wallpaper (see follow)
1. Add UINavigationController property in app delegate implementation
#import "AppDelegate.h" #import "FirstViewController.h" @interface AppDelegate () @property (nonatomic, strong) UINavigationController *navigationController; @end @implementation AppDelegate ...
2. Initialize our navigation controller using its initWithRootViewController: method and pass our root view controller as its parameter.
Then we will set the navigation controller as the root view controller of our window.
- (BOOL) application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { FirstViewController *viewController = [[FirstViewController alloc] initWithNibName:nil bundle:nil]; self.navigationController = [[UINavigationController alloc] initWithRootViewController:viewController]; self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; self.window.rootViewController = self.navigationController; self.window.backgroundColor = [UIColor whiteColor];
[self.window makeKeyAndVisible];
return YES; }
3. FirstViewController implementation
#import "FirstViewController.h" #import "SecondViewController.h" @interface FirstViewController () @property (nonatomic, strong) UIButton *displaySecondViewController; @end @implementation FirstViewController - (void) performDisplaySecondViewController:(id)paramSender { SecondViewController *secondController = [[SecondViewController alloc] initWithNibName:nil bundle:NULL]; [self.navigationController pushViewController:secondController animated:YES]; } - (void)viewDidLoad { [super viewDidLoad]; self.title = @"First Controller"; self.displaySecondViewController = [UIButton buttonWithType:UIButtonTypeSystem]; [self.displaySecondViewController setTitle:@"Display Second View Controller" forState:UIControlStateNormal]; [self.displaySecondViewController sizeToFit]; self.displaySecondViewController.center = self.view.center; [self.displaySecondViewController addTarget:self action:@selector(performDisplaySecondViewController:) forControlEvents:UIControlEventTouchUpInside]; [self.view addSubview:self.displaySecondViewController]; } @end
4. create this second view controller, without a .xib file
#import "SecondViewController.h" @implementation SecondViewController - (void)viewDidLoad { [super viewDidLoad]; self.title = @"Second Controller"; } - (void) goBack { [self.navigationController popViewControllerAnimated:YES]; } - (void) viewDidAppear:(BOOL)paramAnimated { [super viewDidAppear:paramAnimated]; [self performSelector:@selector(goBack) withObject:nil afterDelay:5.0f]; }