从一个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 = [[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

你可能感兴趣的:(iOS开发)