1. 程式人生 > >從一個tabbarController 跳轉到另一個 tabbarController

從一個tabbarController 跳轉到另一個 tabbarController

再看到像qq或者支付寶一類 首頁作為一個入口 你面是獨立的模組或者專案,這類一般是以一個入口跳入到你面的web版App或者是一些 混合開發 例如weex  rect native 這類基於js的第三方框架。像大體量的app一般都是元件化,便於管理和維護,不過如果就三兩個人開發還是別整那些沒用的,畢竟自己寫的bug還得自己改。

//方法一 這種是通過切換視窗控制器的方式切換

 [UIView transitionWithView:[UIApplication sharedApplication].keyWindow duration:0.5f options:UIViewAnimationOptionTransitionCrossDissolve animations:^{
        
        BOOL oldState = [UIView areAnimationsEnabled];
        [UIView setAnimationsEnabled:NO];
     [UIApplication sharedApplication].keyWindow.rootViewController = tabbarVC; //你所要切換的tabbar 此處也可以是controlller
         tabbarVC.selectedIndex = 0; //預設選中tabbar第一個item
        [UIView setAnimationsEnabled:oldState];
        
    } completion:^(BOOL finished) {
        
    }];

//方法二  這種相對第一種相對生硬

在專案中通常會遇到一下場景: 從一個tabbarController 的item 跳轉到 另一個item 這個只要獲取到當前tabbar就可以切換。是獲取同一個 不是建立一個;

 self.tabBarController.selectedIndex = 2;

場景二 ,從tabbarController A t跳轉到 tabbarController B 這個一般是app兩個不同功能大模組切換。或者一個APP巢狀子App.

這個可以通過window的根控制器切換達到效果。當然一般一個App巢狀第三App一般採用web.或者weex  React Native  。支付寶飛豬,當手機裝有飛豬 會先選擇開啟飛豬APP沒有裝,web版。

//A tabbarController 跳轉到 B tabbarController

BtabbarController *tabbarVC = [[BtabbarControlleralloc]init];

    AppDelegate *appdelegateE = (AppDelegate*)[UIApplication sharedApplication].delegate;

    appdelegateE.window.rootViewController = tabbarVC;

    tabbarVC.selectedIndex = 0;

// B tabbarController 返回到 A tabbarController

AppDelegate *appDelegatE = (AppDelegate*)[UIApplication sharedApplication].delegate;

   appDelegatE.window.rootViewController = appDelegatE.aTabbarVC;

//注意的是在 

AppDelegate 中暴露出主tabbarController 便於後面切換獲取。

#import <UIKit/UIKit.h>

#import "AtabbarController.h"

@interface AppDelegate : UIResponder <UIApplicationDelegate>

@property (strong, nonatomic) UIWindow *window;

@property(nonatomic,strong)AtabbarController *aTabbarVC;

@end

demo: https://github.com/YST521/tabbarJump.git