[PR]
2024年12月04日
×
[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。
Tab Bar ControllerとNavigation Controller
2009年01月23日
Xcodeで新規作成時にTab Bar Applicationを選ぶと、画面の下にTab Barがあり、2つのビューを切り替えて表示できる状態になります。さて、ここでそれぞれのビューへの参照はどうすれば得られるのでしょう。これを考える時、Interface Builderがヒントになります。View Modeを中央のツリー表示に切り替えてみましょう。Tab Bar Controllerが一番上の階層にあります。その下にそれぞれのView Controllerがぶら下がっています。それぞれのView ControllerをNavigation Controllerに変えた場合には、Tab Bar Controllerが一番上にあるままで、その下がNavigation Controllerで、その下にView Controllerが配置されます。なお、Interface BuilderでのTab Bar Controllerは代表クラスにあるtabBarControllerのことです。それぞれのタブの項目は配列に格納されているので、例えば左から数えて2番目のタブの項目にあるView Controllerのid値は代表クラス内で表記するなら、
単なるView Controllerの場合:
[[tabBarController viewControllers] objectAtIndex:1]
Navigation Controllerの場合で今表示中扱いのViewのController:
[(UINavigationController *)[[tabBarController viewControllers] objectAtIndex:1] topViewController]
という具合になります。じゃあ代表クラス外ならどうなるかというと、以前の記事に書いたように、
というような感じでまず代表クラスの参照を得てから、先ほどのtabBarControllerをappDelegate.tabBarControllerに置き換えて表記します。これまでに代表クラスのヘッダをインポートしていない場合には、忘れずにインポートしておきましょう。
単なるView Controllerの場合:
[[tabBarController viewControllers] objectAtIndex:1]
Navigation Controllerの場合で今表示中扱いのViewのController:
[(UINavigationController *)[[tabBarController viewControllers] objectAtIndex:1] topViewController]
という具合になります。じゃあ代表クラス外ならどうなるかというと、以前の記事に書いたように、
Tiny3DAppDelegate *appDelegate = (Tiny3DAppDelegate *)[[UIApplication sharedApplication]delegate];
というような感じでまず代表クラスの参照を得てから、先ほどのtabBarControllerをappDelegate.tabBarControllerに置き換えて表記します。これまでに代表クラスのヘッダをインポートしていない場合には、忘れずにインポートしておきましょう。
PR
Comment