読者です 読者をやめる 読者になる 読者になる

なかじまの開発ブログ

アプリ開発における備忘録などなど。

MENU

UINavigationControllerを使って、画面遷移をする【Objective-C】

Objective-C

最近 UINavigationController の便利さに気づきました。

いっぱい画面遷移するアプリだと、UINavigationControllerを使うのがいいと思います。

最初からある ViewController に実装する体で進めます。


では InterfaceBuilder に NavigationController を設置します。

設置した NavigationController の TopBar と BottomBar は None に設定するといいと思います。

f:id:s_nakajima:20151226092957p:plain

NavigationController についてきた RootViewControllerは消してください。


次に、NavigationControllerを選択し、下図の → を選択。

f:id:s_nakajima:20151226093430p:plain

そうしたら Triggered Segues の root view controller の右にある○を最初に起動したいViewControllerにドラッグします。

f:id:s_nakajima:20151226093547p:plain


そして NavigationController の「Is Initial View Controller」にチェックを入れてください。

f:id:s_nakajima:20151226093808p:plain

ViewControllerの左にあった矢印が NavigationController に移動します。

f:id:s_nakajima:20151226093906p:plain


あとは画面遷移先のViewControllerを増やして、遷移用のボタンも設置。

f:id:s_nakajima:20151226094100p:plain



それではコーディング。

NavigationControllerの実装

『AppDelegate.m』

- (BOOL)application:(UIApplication *)application didFinishLaunchiWithOptions:(NSDictionary *)launchOptions {
  UINavigationController *viewController;
  viewController = [[UINavigationController alloc] init];

  return YES;
}

ひとつめ

『ViewController.h』

- (IBAction)nextBtnTap:(id)sender;

『ViewController.m』

#import "SecondViewController.h"

  ・
  ・
  ・

- (IBAction)nextBtnTap:(id)sender {
  // 次の画面へ
  SecondViewController *secondView = [self.storyboard instantiateViewControllerWithIdentifire:@"secondview"];
  [self.navigationController pushViewController:secondView animated:YES];
}

ふたつめ

『SecondViewController.h』

- (IBAction)backBtnTap:(id)sender;
- (IBAction)nextBtnTap:(id)sender;

『SecondViewController.m』

#import "ThirdViewController.h"

  ・
  ・
  ・

- (IBAction)backBtnTap:(id)sender {
  // 前の画面に戻る
  [self.navigationController popViewControllerAnimated:YES];
}

- (IBAction)nextBtnTap:(id)sender {
  // 次の画面へ
  ThirdViewController *thirdView = [self.storyboard instantiateViewControllerWithIdentifire:@"thirdview"];
  [self.navigationController pushViewController:thirdView animated:YES];
}

みっつめ

『ThirdViewController.h』

- (IBAction)backBtnTap:(id)sender;
- (IBAction)toptBtnTap:(id)sender;

『ThirdViewController.m』

- (IBAction)backBtnTap:(id)sender {
  // 前の画面に戻る
  [self.navigationController popViewControllerAnimated:YES];
}

- (IBAction)topBtnTap:(id)sender {
  // 1番目の画面に戻る
  [self.navigationController popToRootViewControllerAnimated:YES];
}


以上。

まとめ

次の画面に遷移

ViewController *viewController = [self.storyboard instantiateViewControllerWithIdentifire: Storyboard ID ];
[self.navigationController pushViewController:viewController animated:YES];

前の画面に戻る

[self.navigationController popViewControllerAnimated:YES];

一番初めの画面に戻る

[self.navigationController popToRootViewControllerAnimated:YES];

n番目の画面に戻る

[self.navigationController popToViewController:[self.navigationController.viewControllers objectAtIndex:n-1] animated:YES];

つまり、2番目の画面に戻りたい場合「objectAtIndex」は1になります。

こちらもどうぞ

nsdevelop.hatenablog.com