3歩歩くと忘れるぶろぐ

ついに大学生から社会人になってしまった、地理系・情報系大学生だった人のぶろぐ。えんじにあえんじにあ。

tabBarControllerとUINavigationControllerの両方を使いたい場合

しばらく更新してなかったのと手こずったので備忘録

 

よくあるニュースアプリのようにtabbed Applicationで画面遷移するようにしたい

 

こんな感じの

 tableviewのcellをタップすると画面遷移するやつ

↓(画像元:http://itunes.apple.com/jp/app/yahoo!heddorain/id407906756?mt=8

f:id:ikasumi_wt:20120903233507j:plainf:id:ikasumi_wt:20120903233637j:plain

 

 

やりかた(例えばviewController1の内部で画面遷移をさせる場合)

Xcodeでプロジェクト作成

 new project→tabbed applicationを選択

 AppDelegate.mを編集

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

の中の

UIViewController *viewController1 = [[[FirstViewController alloc] initWithNibName:@"FirstViewController" bundle:nil] autorelease];
UIViewController *viewController2 = [[[SecondViewController alloc] initWithNibName:@"SecondViewController" bundle:nil] autorelease];

とある部分の下あたりに

UINavigationController *navi = [[[UINavigationController alloc] initWithRootViewController:viewController1] autorelease];

を追加する。

その後

self.tabBarController = [[[UITabBarController alloc] init] autorelease];self.tabBarController.viewControllers = [NSArray arrayWithObjects:navi, viewController2, nil];self.window.rootViewController = self.tabBarController; [self.window makeKeyAndVisible]; return YES; }

 とする。

 

あとはFirstViewControllerでもなんでもで画面遷移等をする。

 

 

大事なのは

self.tabBarController.viewControllers = [NSArray arrayWithObjects:navi, viewController2, nil];

self.tabBarController.viewControllersに入れるのがviewControllerではなくウUINavigationControllerをおいておくこと

 

今まではtabでviewControllerを切り替えていたけれど、

切り替えていたものをviewControllerじゃなくてUINavigationControllerに変更して、UINavigationControllerはそのまま普段通りに利用してる感じ

 

//ほんとはstoryboardを使うと楽々開発できたりもする

//Xcode4.2以上

// http://d.hatena.ne.jp/HirosigeT/20111003/1317661123

// http://matome.naver.jp/odai/2133196424153144301

 

 

参考:http://iphone-app-developer.seesaa.net/article/130194298.html

(半分ぐらいは学内のiphone勉強会で講師に聞いた)