给tabbar 中间位置添加一个自定义按钮 (Swift 代码)

news2025/1/16 16:10:02

在这里插入图片描述

1.创建一个继承自UITabbarViewController的控制器,在这个控制器中写如下代码

override func viewDidLoad() {
        super.viewDidLoad()
        //这个按钮就是中间添加的按钮
        let middleBtn = UIButton(type: .custom)
        middleBtn.frame = CGRect(x: kScreenWidth/5*2 , y: -10, width: kScreenWidth/5, height: 55)
        middleBtn.setImage(UIImage(named: "tabbar_middle_add"), for: .normal)
        middleBtn.setImage(UIImage(named: "tabbar_middle_add"), for: .highlighted)
        middleBtn.addTarget(self, action: #selector(middleBtnAction), for: .touchUpInside)
        
        let health = HealthViewController()
        let healthNav = NavigationViewController(rootViewController: health)
        healthNav.tabBarItem.image = UIImage(named: "tabbar_health_unselected")?.withRenderingMode(UIImage.RenderingMode.alwaysOriginal)
        healthNav.tabBarItem.selectedImage = UIImage(named: "tabbar_health_selected")?.withRenderingMode(UIImage.RenderingMode.alwaysOriginal)
        healthNav.title = "健康"
        
        let vedio = VedioViewController()
        let vedioNav = NavigationViewController(rootViewController: vedio)
        vedioNav.tabBarItem.image = UIImage(named: "tabbar_vedio_unselected")?.withRenderingMode(UIImage.RenderingMode.alwaysOriginal)
        vedioNav.tabBarItem.selectedImage = UIImage(named: "tabbar_vedio_selected")?.withRenderingMode(UIImage.RenderingMode.alwaysOriginal)
        vedio.tabBarItem.imageInsets = UIEdgeInsets(top: -15, left: 0, bottom: 0, right: 0)
        vedioNav.title = "视界"
        
        let middle = UIViewController()//占位用
        middle.tabBarItem.isEnabled = false
        
        let life = LifeViewController()
        let lifeNav = NavigationViewController(rootViewController: life)
        lifeNav.tabBarItem.image = UIImage(named: "tabbar_life_unselected")?.withRenderingMode(UIImage.RenderingMode.alwaysOriginal)
        lifeNav.tabBarItem.selectedImage = UIImage(named: "tabbar_life_selected")?.withRenderingMode(UIImage.RenderingMode.alwaysOriginal)
        lifeNav.title = "商城"
        
        let mine = MineViewController()
        let mineNav = NavigationViewController(rootViewController: mine)
        mineNav.tabBarItem.image = UIImage(named: "tabbar_mine_unselected")?.withRenderingMode(UIImage.RenderingMode.alwaysOriginal)
        mineNav.tabBarItem.selectedImage = UIImage(named: "tabbar_mine_selected")?.withRenderingMode(UIImage.RenderingMode.alwaysOriginal)
        mineNav.title = "个人"
        
        viewControllers = [healthNav,vedioNav,middle,lifeNav,mineNav]
        tabBar.tintColor = RGBCOLOR(r: 0, g: 216, b: 160)
        tabBar.barTintColor = UIColor.white
        tabBar.unselectedItemTintColor = RGBCOLOR(r: 191, g: 187, b: 187)
        tabBar.shadowImage = UIImage()
        tabBar.backgroundImage = UIImage(named: "tabbar_bg")
        tabBar.backgroundColor = .white
        tabBar.addSubview(middleBtn)
        tabBar.bringSubviewToFront(middleBtn)
        selectedIndex = 1
        delegate = self
 }

中间按钮的点击方法

 @objc func middleBtnAction() {
  }
extension TabBarViewController:UITabBarControllerDelegate {
    //是否可以点击
    func tabBarController(_ tabBarController: UITabBarController, shouldSelect viewController: UIViewController) -> Bool {
        return true
    }
    //点击其他四个item 代理方法
    func tabBarController(_ tabBarController: UITabBarController, didSelect viewController: UIViewController)   {
      
  }
  }

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/72133.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

如何提高外贸询单转化率

如何提高外贸询盘的转化率?米贸搜整理了以下方法,希望对你有所帮助: 一,如何有效地对网络客户进行分类 在网上交易的过程中,有各种各样的客户。所以要对所有客户进行分类管理,提高效率,增加交易量。 有外…

etcd实现大规模服务治理应用实战

导读:服务治理目前越来越被企业建设所重视,特别现在云原生,微服务等各种技术被更多的企业所应用,本文内容是百度小程序团队基于大模型服务治理实战经验的一些总结,同时结合当前较火的分布式开源kv产品etcd,…

神同步的智能运维体系和世界杯442阵型

世界杯如火如荼地踢,动如脱兔的运动员在屏幕前挥洒汗水、静如处子的程序员们稳坐屏幕前敲键盘。 可是谁说IT人除了盯着屏幕大呼小叫,就没法参与世界杯了呢?不管做的是什么产品什么领域,冥冥之中总有一根红线跟世界杯连接起来。 …

华为机试 - 新学校选址

目录 题目描述 输入描述 输出描述 用例 题目解析 算法源码 题目描述 为了解新学期学生暴涨的问题,小乐村要建立所新学校, 考虑到学生上学安全问题,需要所有学生家到学校的距离最短。 假设学校和所有学生家都走在一条直线之上,请问学校建立在什么位置&#xf…

一文详细理解Linux的一些环境基础开发工具使用(上)

前言: 本文章让大家理解Linux一些基础开发工具的使用,例如Linux如何下载一些软件,Linux如何进行编译代码,Linux怎么上传远程仓库等等,其实Linux工具本质也是命令!! 💞 💞…

L1-033 出生年(java)-天梯赛

文章目录🏅前言:L1-033 出生年(java)-天梯赛🎯题解:🐒结果:🏅前言: 代码含详细注释及解题思路。若有不理解的地方,欢迎大家探讨交流,…

Java开发手册(黄山版)

这本书值得反复看、也可作为随手翻阅字典一、编程规约 (一) 命名风格 【强制】纯拼音命名方式也要避免采用。【强制】常量命名应该全部大写,单词间用下划线隔开,力求语义表达完整清楚,不要嫌名字长【强制】POJO 类中的任何布尔类型的变量&…

CMake中add_custom_command的使用

CMake中的add_custom_command命令用于将自定义构建规则添加到生成的构建系统(Add a custom build rule to the generated build system),其格式如下: add_custom_command(OUTPUT output1 [output2 ...]COMMAND command1 [ARGS] [args1...][COMMAND comm…

【多线程(五)】volatile关键字、原子性问题、AtomicInteger内存分析与源码分析、悲观锁和乐观锁

文章目录5.原子性5.1 volatile-问题2.2 volatile解决5.3 synchronized 解决5.4 原子性5.5 volatile关键字不能保证原子性5.6 原子性 AtomicInteger5.7 AtomicInteger-内存解析5.8 AtomicInteger-源码解析5.9 悲观锁和乐观锁小结5.原子性 5.1 volatile-问题 代码分析 package…

五道LeetCode《中等难度》的单链表题

五道单链表中等难度题型1. 剑指 Offer II 021. 删除链表的倒数第 n 个结点第一种解法(单指针):第二种解法(栈):第三种解法(双指针):2. 删除排序链表中的重复元素 II(重点&#xff09…

利用VGG16网络模块进行迁移学习实现图像识别

​ ImageNet虽然带有”Net“,但他不是一种深度神经网络模型,它是个数据集,斯坦福大学教授李飞飞带头建立,是目前图像分类、检测、定位的最常用数据集之一。该数据集含大量数据1500万图片,2.2万类别,真彩图&…

PPT免费放送|Zabbix峰会结束了?还有件儿事!

精彩的Zabbix峰会成功举办,这并不意味着学习交流结束,还有件儿事——17份PPT免费获取,网盘见文末。干货满满细细品味。也欢迎你留言评价! 值得一提的是:峰会中有理有据说明:Zabbix支持信创。开源免费的Zab…

IBDP学生如何申请中国香港的大学?

作为世界上最具竞争力的城市之一,香港拥有一些亚洲乃至世界上最好的大学。当然,这也使得香港成为内地学生以及国际留学生最喜爱的留学目的地之一。中国香港的教育在很大程度上是模仿英国的教育体系,但本科课程通常是英国和美国体系的混合体。…

Android 中的广播机制

一、Android广播概念: 在Android中,有一些操作完成以后,会发送广播,Android系统内部产生这些事件后广播这些事件,至于广播接收对象是否关心这些事件,以及它们如何处理这些事件,都由广播接收对象…

(附源码)ssm日语学习系统 毕业设计 271621

基于ssm日语学习系统 摘 要 信息化社会内需要与之针对性的信息获取途径,但是途径的扩展基本上为人们所努力的方向,由于站在的角度存在偏差,人们经常能够获得不同类型信息,这也是技术最为难以攻克的课题。针对日语学习等问题&#…

MySQL——表的内容增删查改

文章目录表的增删改查一、Create1、单行全列插入2、多行数据指定列插入3、插入否则更新4、替换二、Retrieve😊(重点)2.1 select 列2.1.1 全列查询2.1.2 指定列查询2.1.3 查询字段为表达式2.1.4 为查询结果指定别名2.1.5 结果去重2.2 where查询2.3 结果排序2.4 筛选分…

【VC7升级VC8】将vCenter Server 7.X 升级为 vCenter Server 8 (下)—— 升级步骤说明

目录前文说明3. 第一阶段升级(1)点击【升级】(2)升级介绍(3)最终中用户许可协议(4)连接到源设备(5)VC7与ESXi 证书警告(6)vCenter Ser…

【Vue】各种loader的基本配置与使用

✍️ 作者简介: 前端新手学习中。 💂 作者主页: 作者主页查看更多前端教学 🎓 专栏分享:css重难点教学 Node.js教学 从头开始学习 ajax学习 目录webpack中的loader  loader概述  打包处理css文件  打包处理less文件  打包处理图片  …

LWIP框架

目录 协议栈分层思想 1. 网络接口层 2. 网络层 3. 传输层 4. 应用层 进程模型 单进程模型 协议栈编程接口 1、Raw/Callback API 2、Netconn API 3、Socket API 协议栈分层思想 TCP/IP协议完整的包含了一系列构成互联网基础的网络协议,TCP/IP协议的开发出…

HTTP Digest Authentication 使用心得

简介 浏览器弹出这个原生的对话框,想必大家都不陌生,就是 HTTP Baisc 认证的机制。 这是浏览器自带的,遵循 RFC2617/7617 协议。但必须指出的是,遇到这界面,不一定是 Basic Authentication,也可能是 Dige…