再看到像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 = [[BtabbarController alloc]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
#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