Swift之自定义突出按钮Tabbar
来源:互联网 发布:word文档下载mac版 编辑:程序博客网 时间:2024/04/28 00:22
个人原创请勿转载!谢谢
也不算是自定义一个Tabbar,而是在UITabbar的基础上使用Runtime来进行动态添加属性
效果如图:
运行时机制
Runtime是一套比较底层的纯C语言的API, 属于C语言库, 包含了很多底层的C语言API。
在我们平时编写的iOS代码中, 最终都是转成了runtime的C语言代码。所谓运行时,也就是在编译时是不存在的,只是在运行过程中才去确定对象的类型、方法等。利用Runtime机制可以在程序运行时动态修改类、对象中的所有属性、方法等。即使一行 Objective-C 代码也不写,每一个 Swift app 都会在 Objective-C runtime 中运行,开启动态任务分发和运行时对象关联的世界。更确切地说,可能在仅使用 Swift 库的时候只运行 Swift runtime。但 Objective-C runtime 与我们共处了如此长的时间,我们也应该将其发挥到极致。
涉及方法
关联对象(Associated Objects)
Swift extension 能对已经存在 Cocoa 类中添加极为丰富的功能,但它的兄弟 Objective-C 的 category 却逊色了不少。比如说 Objective-C 中的 extension 就无法向既有类添加属性。令人庆幸的是 Objective-C 的 关联对象 可以缓解这种局面。例如要向一个工程里所有的 view controllers 中添加一个 descriptiveName 属性,我们可以简单的使用 objc_get/setAssociatedObject()来填充其 get 和 set 块
实现思路
1.在原有的Tabbar添加一个按钮,将其放到指定位置(中间偏上)
2.这时候要注意tabbar的顶部黑线,需要对其进行隐藏或者设置透明颜色来去除
代码实现
extension UITabBar{ //关联对象的ID,注意,在私有嵌套 struct 中使用 static var,这样会生成我们所需的关联对象键,但不会污染整个命名空间。 private struct AssociatedKeys { static var TabKey = "tabView" } //定义一个新的tabbar属性,并设置set,get方法 var btnTab:UIButton?{ get{ //通过Key获取已存在的对象 return objc_getAssociatedObject(self, &AssociatedKeys.TabKey) as? UIButton } set{ //对象不存在则创建 objc_setAssociatedObject(self, &AssociatedKeys.TabKey, newValue, .OBJC_ASSOCIATION_RETAIN_NONATOMIC) } } /** 添加中心按钮 */ func AddMyCenterTab()->UIButton { if self.btnTab == nil { self.shadowImage = UIImage()//(49 - 42) / 2 let btn = UIButton(frame: CGRect.init(x: (WIDTH - 50) / 2, y: -14, width: 50, height: 50)) btn.autoresizingMask = [.FlexibleHeight,.FlexibleWidth] btn.setImage(UIImage.init(named: "工具"), forState: UIControlState.Normal) self.addSubview(btn) self.btnTab = btn } return self.btnTab! }}
实现时只需调用AddMyCenterTab()即可
下面来去除黑线:
//边框颜色 self.tabBar.shadowImage = UIImage.init(color: bglightGray) self.tabBar.backgroundImage = UIImage.init(color: bglightGray)
- Swift之自定义突出按钮Tabbar
- iOS 中间按钮突出的tabbar
- Swift中设置自定义tabBar按钮的动画效果
- iOS Swift 自定义tabbar
- 自定义皮肤-----tabBar按钮皮肤
- iOS之UI TabBarcontroller----自定义tabBar/改变tabBar中间按钮的样式(一)
- Swift-自定制带有特殊按钮TabBar
- IOS之自定义tabbar
- Swift - 自定义tabbar的封装
- 实现Tabbar的中间按钮向上突出的两种方法
- IOS 自定义tabbar,并给tabbar按钮加载网络图片
- IOS 自定义tabbar,并给tabbar按钮加载网络图片
- tabbar 按钮形状自定义显示问题
- iOS通过按钮图片创建自定义TabBar
- 完美封装 tabBar 自定义加号按钮
- iOS Tabbar上增加一个自定义按钮
- 关于tabbar上自定义按钮的设置
- 自定义dialog布局展示(关闭按钮突出一块)
- struct dirent和DIR结构体
- 1.1.1 Linux是什么
- bzoj2811 apio2012 守卫 guard 贪心
- dwr3实现消息精确推送详细步骤
- 二分查找-lintcode
- Swift之自定义突出按钮Tabbar
- !function(){}() ” 是什么意思
- UITableView基础
- Windows下安装MySQL5.7
- iOS开发之UIImagePickerController详解
- [spring入门学习笔记][spring的IoC原理]
- Android 深入理解Android中的自定义属性
- 白书游--第一章
- PHP实现凯撒加密算法