banner
李大仁博客

李大仁博客

天地虽大,但有一念向善,心存良知,虽凡夫俗子,皆可为圣贤。

iOS開発におけるUITabBarControllerは、前回選択したtabIndexを記録して返します。

UITabBarController は複数の UIViewController を独立して表示することができますが、各 UIViewController 間の関係の制御はあまり良く制御できません。特に最後に選択したタブの番号を記録していない場合、特定の要件を実現するのが困難になります。例えば、A タブでイベントを通じて最後に選択した B タブに切り替えたり、A タブのイベントで B タブに切り替えてから処理が完了した後に A タブに戻る必要がある場合などです。UITabBarController で前回選択したタブの番号を知ることができれば、このような要件を満たすことができます。

参考コード

//MyTabBarController.h
@interface MyTabBarController : UITabBarController {
// 最後に選択した Index
NSUInteger _lastSelectedIndex;
}

@property(readonly, nonatomic) NSUInteger lastSelectedIndex;
@end

//MyTabBarController.m
@implementation MyTabBarController
@synthesize lastSelectedIndex=_lastSelectedIndex;

-(void)setSelectedIndex:(NSUInteger)selectedIndex
{
// 等しくない場合のみ設定
if (self.selectedIndex != selectedIndex) {
// 最後に選択した Index を設定
_lastSelectedIndex = self.selectedIndex;
NSLog(@"1 OLD:%d , NEW:%d",self.lastSelectedIndex,selectedIndex);
}

//親クラスのsetSelectedIndexを呼び出す
\[super setSelectedIndex:selectedIndex\];

}

  • (void)tabBar:(UITabBar *)tabBar didSelectItem:(UITabBarItem *)item
    {
    // 選択された item を取得
    NSUInteger tabIndex = [tabBar.items indexOfObject];
    if (tabIndex != self.selectedIndex) {
    // 最後に選択した Index を設定
    _lastSelectedIndex = self.selectedIndex;
    NSLog(@"2 OLD:%d , NEW:%d",self.lastSelectedIndex,tabIndex);
    }
    }

@end

実装する際には、-(void) setSelectedIndex:(NSUInteger) selectedIndex と - (void) tabBar:(UITabBar *) tabBar didSelectItem:(UITabBarItem *) item の両方を表示する必要があります。readonly な lastSelectedIndex を追加することで、最後に選択した Index を取得できます。

読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。