iOS 多個(gè)UITabBar的技術(shù)實(shí)現(xiàn)

一、源起

小編最近在使用App的時(shí)候侥涵,經(jīng)常遇到UITabBarController為根控制器跳轉(zhuǎn)到另一個(gè)UITabBarController.這種作為可以盡最大可能性的細(xì)分模塊。經(jīng)過幾次實(shí)驗(yàn)和瀏覽相關(guān)App。最終決定了2種方案。

二寸认、實(shí)現(xiàn)關(guān)鍵點(diǎn)

1、實(shí)現(xiàn)UITabBarControllerDelegate

    @interface YITabBarController ()
    @end
    @implementation YITabBarController
    - (void)viewDidLoad {
        [super viewDidLoad];
        // Do any additional setup after loading the view.
        self.delegate = self;
    }
    @end

2串慰、實(shí)現(xiàn) -tabBarController:shouldSelectViewController:方法

    - (BOOL)tabBarController:(UITabBarController *)tabBarController shouldSelectViewController:(UIViewController *)viewController{
   
 }

三偏塞、實(shí)現(xiàn)方案

第一種實(shí)現(xiàn) 使用模態(tài)視圖

使用模態(tài)視圖并修改模態(tài)視圖的彈出動(dòng)畫為push的形式

    - (BOOL)tabBarController:(UITabBarController *)tabBarController shouldSelectViewController:(UIViewController *)viewController {
        //4是泡泡頁面
        if ([viewController isEqual:[tabBarController.viewControllers objectAtIndex:4]]) {
            SecondTabBarController * vc = [[SecondTabBarController alloc] init];
            CATransition * ansition = [CATransition animation];
            [ansition setDuration:0.25f];
            [ansition setType:kCATransitionMoveIn];
            [ansition setSubtype:kCATransitionFromRight];
            [[UIApplication sharedApplication].keyWindow.layer addAnimation:ansition forKey:nil];
            [self presentViewController:vc animated:NO completion:nil];
            return NO;
        }
        return YES;
    }

模態(tài)視圖的返回

    - (void)viewDidLoad {
        [super viewDidLoad];
        // Do any additional setup after loading the view.
        self.view.backgroundColor = [UIColor groupTableViewBackgroundColor];
        UIBarButtonItem * leftBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"返回" style:(UIBarButtonItemStyleDone) target:self action:@selector(back)];
        self.navigationItem.leftBarButtonItem = leftBarButtonItem;
    }
    - (void)back {
            CATransition * ansition = [CATransition animation];
            [ansition setDuration:0.25f];
            [ansition setType:kCATransitionMoveIn];
            [ansition setSubtype:kCATransitionFromLeft];
            [[UIApplication sharedApplication].keyWindow.layer addAnimation:ansition forKey:nil];
            [self dismissViewControllerAnimated:NO completion:nil];
    }

效果如下圖(gif圖,如果不會(huì)動(dòng)請(qǐng)刷新)


iyiqi_gif1.gif

弊端
gif圖可能看的不是很清楚邦鲫。
弊端就是在push 或者 pop動(dòng)畫執(zhí)行時(shí)會(huì)看到黑影閃過灸叼,如果要求不高的可以使用這個(gè)神汹。
為了解決這個(gè)問題,我們引出第二種實(shí)現(xiàn)方案.

第二種實(shí)現(xiàn) 使用UINavigationController push的形式

導(dǎo)航欄push的方式
還是先實(shí)現(xiàn)前置條件里的代碼

接著實(shí)現(xiàn)以下代碼

    - (BOOL)tabBarController:(UITabBarController *)tabBarController shouldSelectViewController:(UIViewController *)viewController {
        //4是泡泡頁面
        if ([viewController isEqual:[tabBarController.viewControllers objectAtIndex:4]]) {
            SecondTabBarController * vc = [[SecondTabBarController alloc] init];
            vc.hidesBottomBarWhenPushed = YES;
            UINavigationController * nav = tabBarController.viewControllers[tabBarController.selectedIndex];
            [nav pushViewController:vc animated:YES];
            return NO;
        }
        return YES;
    }

注意事項(xiàng)
要在第二個(gè)TabBar里隱藏掉最外層的導(dǎo)航欄古今,否則將可能出現(xiàn)2個(gè)導(dǎo)航欄的效果

    - (void)viewWillAppear:(BOOL)animated {
        [super viewWillAppear:animated];
        [self.navigationController setNavigationBarHidden:YES animated:animated];
    }
    - (void)viewWillDisappear:(BOOL)animated {
        [super viewWillDisappear:animated];
        [self.navigationController setNavigationBarHidden:NO animated:animated];
    }

一定要使用 -setNavigationBarHidden:animated: 這個(gè)方法來顯示隱藏導(dǎo)航欄屁魏,并且動(dòng)畫效果不要寫YES或者NO要用animated,否則將會(huì)出現(xiàn)導(dǎo)航欄黑邊閃一下或者手勢(shì)時(shí)出現(xiàn)黑邊的情況捉腥。
效果如下圖(gif圖氓拼,如果不會(huì)動(dòng)請(qǐng)刷新)


iyiqi_gif2.gif
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市抵碟,隨后出現(xiàn)的幾起案子桃漾,更是在濱河造成了極大的恐慌,老刑警劉巖拟逮,帶你破解...
    沈念sama閱讀 206,214評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件呈队,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡唱歧,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,307評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門粒竖,熙熙樓的掌柜王于貴愁眉苦臉地迎上來颅崩,“玉大人,你說我怎么就攤上這事蕊苗⊙睾螅” “怎么了?”我有些...
    開封第一講書人閱讀 152,543評(píng)論 0 341
  • 文/不壞的土叔 我叫張陵朽砰,是天一觀的道長尖滚。 經(jīng)常有香客問我,道長瞧柔,這世上最難降的妖魔是什么漆弄? 我笑而不...
    開封第一講書人閱讀 55,221評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮造锅,結(jié)果婚禮上撼唾,老公的妹妹穿的比我還像新娘。我一直安慰自己哥蔚,他們只是感情好倒谷,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,224評(píng)論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著糙箍,像睡著了一般渤愁。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上深夯,一...
    開封第一講書人閱讀 49,007評(píng)論 1 284
  • 那天抖格,我揣著相機(jī)與錄音,去河邊找鬼。 笑死他挎,一個(gè)胖子當(dāng)著我的面吹牛筝尾,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播办桨,決...
    沈念sama閱讀 38,313評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼筹淫,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了呢撞?” 一聲冷哼從身側(cè)響起损姜,我...
    開封第一講書人閱讀 36,956評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎殊霞,沒想到半個(gè)月后摧阅,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,441評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡绷蹲,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,925評(píng)論 2 323
  • 正文 我和宋清朗相戀三年棒卷,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片祝钢。...
    茶點(diǎn)故事閱讀 38,018評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡比规,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出拦英,到底是詐尸還是另有隱情蜒什,我是刑警寧澤,帶...
    沈念sama閱讀 33,685評(píng)論 4 322
  • 正文 年R本政府宣布疤估,位于F島的核電站灾常,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏铃拇。R本人自食惡果不足惜钞瀑,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,234評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望锚贱。 院中可真熱鬧仔戈,春花似錦、人聲如沸拧廊。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,240評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽吧碾。三九已至凰盔,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間倦春,已是汗流浹背户敬。 一陣腳步聲響...
    開封第一講書人閱讀 31,464評(píng)論 1 261
  • 我被黑心中介騙來泰國打工落剪, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人尿庐。 一個(gè)月前我還...
    沈念sama閱讀 45,467評(píng)論 2 352
  • 正文 我出身青樓忠怖,卻偏偏與公主長得像,于是被迫代替她去往敵國和親抄瑟。 傳聞我的和親對(duì)象是個(gè)殘疾皇子凡泣,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,762評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容

  • 制定計(jì)劃的必要性 引用「銀河補(bǔ)習(xí)班」里面的一句話: 人生就像射箭,夢(mèng)想就像箭靶子皮假,如果連箭靶子也找不到的話,你每天...
    G桂閱讀 365評(píng)論 2 1
  • 姓名:鮑愚 日期:2019年4月11日 打卡 第 11 天 身體實(shí)修: 早:靜坐30分(94次) 中:一分鐘呼吸...
    鮑愚閱讀 121評(píng)論 0 0
  • 南洋的水里尋不見北方的星 總是被夢(mèng)驚醒鞋拟,再不見鳥語花香的卿 揮筆縱樂憶惜,夢(mèng)不醒君莫停 看惹资,那是一個(gè)丟槍的兵 注:...
    漻涸閱讀 317評(píng)論 6 1