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

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

在做这个功能之前,先来说说背景,博主要在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天前
|
前端开发 Android开发 iOS开发
【Flutter前端技术开发专栏】Flutter在Android与iOS上的性能对比
【4月更文挑战第30天】Flutter 框架实现跨平台移动应用,通过一致的 UI 渲染(Skia 引擎)、热重载功能和响应式框架提高开发效率和用户体验。然而,Android 和 iOS 的系统差异、渲染机制及编译过程影响性能。性能对比显示,iOS 可能因硬件优化提供更流畅体验,而 Android 更具灵活性和广泛硬件支持。开发者可采用代码、资源优化和特定平台优化策略,利用性能分析工具提升应用性能。
【Flutter前端技术开发专栏】Flutter在Android与iOS上的性能对比
|
11天前
|
存储 Swift iOS开发
使用Swift开发一个简单的iOS应用的详细步骤。
使用Swift开发iOS应用的步骤包括:创建Xcode项目,设计界面(Storyboard或代码),定义数据模型,实现业务逻辑,连接界面和逻辑,处理数据存储(如Core Data),添加网络请求(必要时),调试与测试,根据测试结果优化改进,最后提交至App Store或其它平台发布。
31 0
|
11天前
|
安全 Swift iOS开发
【Swift 开发专栏】Swift 与 UIKit:构建 iOS 应用界面
【4月更文挑战第30天】本文探讨了Swift和UIKit在构建iOS应用界面的关键技术和实践方法。Swift的简洁语法、类型安全和高效编程模型,加上与UIKit的紧密集成,使开发者能便捷地创建用户界面。UIKit提供视图、控制器、布局、动画和事件处理等功能,支持灵活的界面设计。实践中,遵循设计原则,合理组织视图层次,运用布局和动画,以及实现响应式设计,能提升界面质量和用户体验。文章通过登录、列表和详情界面的实际案例展示了Swift与UIKit的结合应用。
|
11天前
|
存储 安全 Swift
【Swift 开发专栏】使用 Swift 开发一个简单的 iOS 应用
【4月更文挑战第30天】本文介绍了使用 Swift 开发简单 iOS 待办事项应用的步骤。首先,阐述了 iOS 开发的吸引力及 Swift 语言的优势。接着,详细说明了应用的需求和设计,包括添加、查看和删除待办事项的功能。开发步骤包括创建项目、界面搭建、数据存储、功能实现,并提供了相关代码示例。最后,强调了实际开发中需注意的细节和优化,旨在帮助初学者掌握 Swift 和 iOS 开发基础。
|
iOS开发 索引
iOS开发之TabBar再次点击实现刷新
需求 之前已经实现了自定义TabBar,如图所示: 自定义TabBar.jpeg 现在需要实现一个类似今日头条TabBar的功能 —— 如果继续点击当前TabBar的选中项,那么该界面需要刷新UITableView。
1142 0
|
2月前
|
API 数据安全/隐私保护 iOS开发
利用uni-app 开发的iOS app 发布到App Store全流程
利用uni-app 开发的iOS app 发布到App Store全流程
105 3
|
4月前
|
存储 iOS开发
iOS 开发,如何进行应用的本地化(Localization)?
iOS 开发,如何进行应用的本地化(Localization)?
123 2
|
4月前
|
存储 数据建模 数据库
IOS开发数据存储:什么是 UserDefaults?有哪些替代方案?
IOS开发数据存储:什么是 UserDefaults?有哪些替代方案?
42 0
|
4月前
|
安全 编译器 Swift
IOS开发基础知识: 对比 Swift 和 Objective-C 的优缺点。
IOS开发基础知识: 对比 Swift 和 Objective-C 的优缺点。
106 2
|
2月前
|
API 开发工具 Android开发
iOS 和 Android 平台的开发有哪些主要区别?
iOS与Android开发区别:iOS用Objective-C/Swift,App Store唯一下载渠道;Android用Java/Kotlin,多商店发布(如Google Play、华为市场)。设计上,iOS简洁一致,Android灵活可定制。开发工具,iOS用Xcode,Android用Android Studio。硬件和系统多样性,iOS统一,Android复杂。权限管理、审核流程及API各有特点,开发者需依据目标平台特性进行选择。
36 3