iOS开发 - 点击tabbar某一个item,直接push跳转进入需要的页面,而不是切换tab

SwiftTabBar自定义
本文介绍如何使用Swift在Storyboard创建的TabBarController中通过代码添加新的ViewController,并实现点击特定TabBar项时不切换界面而是触发跳转的功能。

在做这个功能之前,先来说说背景,博主要在tabbar中新增一个item,而很不幸是这个tabbar是SB创建的,而博主本身对SB的了解并不透彻,所以准备用纯代码的方式来添加这个item。
1.可能对于很多用惯了纯代码的开发来说,SB的确过于陌生了,怎么来添加一个新的VC到SB创建完成的tababr中呢:

/*如果你是自定义的tabbar,那样就不用多说了,更简单,博主要说的是系统的tabbar*/
//获取到当前的tabbar中的VC
NSMutableArray *newItems = [NSMutableArray arrayWithArray:self.viewControllers]; 
//插入你创建的VC   
[newItems insertObject:[[JumpViewController alloc] init] atIndex:3];
//因为本VC是继承于系统的UITabBarController的,所以,下面方法重新定义新的tababr
self.viewControllers = newItems;

2.怎么让点击了tabbar的item之后不切换tabbar,而是直接跳转
首先需要遵守两个协议UITabBarControllerDelegate,UITabBarDelegate
其次是用代理方法:

-(BOOL)tabBarController:(UITabBarController *)tabBarController shouldSelectViewController:(UIViewController *)viewController{
    if ([tabBarController.tabBar.selectedItem.title isEqualToString:@"跳转的页面"]) {
        [[NSNotificationCenter defaultCenter] postNotificationName:[NSString stringWithFormat:@"jump%ld",tabTag] object:nil];
        return NO;//为NO就不会切换tab
    }
    return YES;
}

- (void)tabBar:(UITabBar *)tabBar didSelectItem:(UITabBarItem *)item {
    //这里为什么要通过item名字来判断第几个tab呢?
    //因为发现self.selectIndex不准确,索性手动来判断。
    //解释下为什么需要知道当前是第几个item?
    //因为SB创建的tabbarController没有navgation,所以无法直接push跳转。
    //present虽然能跳转,但是没了navgation,在present的页面万一push就又麻烦了。所以不能直接在tabbarController里面push;
    //另外,为了保证发送通知针对的是你当前所在的界面,而不是每次点击发送的通知和接收的通知都一样,所以,加上index后缀,使得通知一一对应。
    if ([item.title isEqualToString:@"首页"]) {
        tabTag = 0;
    }
    if ([item.title isEqualToString:@"类别"]) {
        tabTag = 1;
    }
    if ([item.title isEqualToString:@"购物车"]) {
        tabTag = 2;
    }
    if ([item.title isEqualToString:@"我的"]) {
        tabTag = 4;
    }
    if ([item.title isEqualToString:@"跳转的页面"]) {
        return;
    }
}

最后一步,在每一个tabdeVC中注册通知,执行push跳转,通知的名字是根据当前tab的index作为后缀的哦。

ps:你会发现JumpViewController并无卵用,不会被用到,只是进行一个占位。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

CodingFire

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值