Google

2010年10月19日火曜日

UITabViewの切替タイミング

iPhoneアプリを制作していて、ちと度忘れしていた点の備忘録。

iOSにはUITabViewというタブ制御コントロールGUIがある。
この下の黒いやつ
これは複数のUIViewを束ねて、横管理を行うシロモノ。
UITabViewControllerで制御すれば、面倒な連携はFWにお任せな感じ。

で、ある理由で、全体をだしたタイミングと、切り替えたタイミングが欲しくなった。
一応、普段はあまり気にしなくてもいいタイミングではあるが。
UITabBarControllerDelegateでフックするようなことがヘルプにあったが、今ひとつ的を得ない内容。
ぐぐっても日本語はなんか見当たらない。

仕方なくFWのソースを追ってみた結果、以下をオーバーライドすればいいことが判明。

// 全体が表示されたタイミング
- (void)viewDidAppear:(BOOL)animated
{
}

// タブが切り替わったタイミング
- (void)tabBar:(UITabBar*)tabBar didSelectItem:(UITabBarItem*)item
{
}

タブの場合、切り替わったタイミングでバー本体とアイテムのインスタンスが渡されるので、ここで処理ができる。

なお、大抵は現在の選択タブを調べたいと思うはずだが、引っ掛けがあるので注意。
選択されているアイテムをUITabBarControllerのselectedIndexで調べても、1つ前に選択されたインデックスが入ってたりする。
この処理が終わった後で更新する処理が走るのだろう。
そこで予め、各ViewContollerのinitで、以下のように記述する。


- (id) init
{
 if ((self = [super init]))
 {
// タブのアイコンを生成
  UIImage* icon = [UIImage imageNamed:@"xxx.png"];
  // アイコンと名称を設定
  self.tabBarItem =
   [[[UITabBarItem alloc] initWithTitle:@"Test" image:icon tag:0] autorelease];
 }
 return self;
}


こうすると、上記の例ではタブにアイコンとTestという文字が表示される。
そして先程のdidSelectItemで飛んでくるitemのtitleプロパティは、initで設定したtitleの内容をきっちりと持っているので、ここで比較すればおk。

0 件のコメント:

コメントを投稿