從一個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