banner
李大仁博客

李大仁博客

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

iOS開發之UITabBarController記錄上一次選中的tabIndex並返回

UITabBarController 可以實現多個 UIViewController 獨立顯示,但是各個 UIViewController 之間的關係的控制就不太好控制了,特別是沒有記錄最近一次選中的 tab 編號,有些需求的實現就比較困難了,比如在 A tab 下通過一個事件可以切換到上一次選中的 B tab,或者 A tab 中的事件需要切換到 B tab 並且在 B tab 處理完成後可以返回到 A tab。這時如果可以知道 UITabBarController 上一次選中的 tab 編號的話,就可以滿足這類需求了。

參考代碼

//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) {
// 設置最近一次
_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) {
    // 設置最近一次變更
    _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

載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。