Swift开发小技巧--TabBar中间按钮的添加方案
TabBar中间按钮的添加方案
之前做百思项目的时候,也有一个中间按钮,当时是重写的TabBar,这里介绍一个新的方法
- 给TabbarVC多添加添加一个控制器,这个控制器的作用仅仅是用来占位的,多了这个控制器中间才会空出一个按钮的位置,不设置文字,不设置图片
// 加号按钮的位置
self .addChildViewController("NullViewController", title: "", normalImage: "")
- 懒加载按钮,注意swift懒加载的书写
// MARK: - 懒加载
private lazy var composeBtn : UIButton = {
() -> UIButton in // 懒加载本质是闭包,只是将这行省略了
// 初始化按钮
let composeBtn = UIButton()
// 设置按钮图片
composeBtn.setImage(UIImage(named: "tabbar_compose_icon_add"), forState: UIControlState.Normal)
composeBtn.setImage(UIImage(named: "tabbar_compose_icon_add_highlighted"), forState: UIControlState.Highlighted)
// 设置背景图片
composeBtn.setBackgroundImage(UIImage(named: "tabbar_compose_button"), forState: UIControlState.Normal)
composeBtn.setBackgroundImage(UIImage(named: "tabbar_compose_button_highlighted"), forState: UIControlState.Highlighted)
// 给按钮添加点击事件
composeBtn.addTarget(self, action: Selector("composeBtnClick:"), forControlEvents: UIControlEvents.TouchUpInside)
// 设置按钮的尺寸
composeBtn.sizeToFit()
return composeBtn
}()
合适
的方法里面添加按钮,这里为什么要强调合适呢,因为之前为了空出按钮的位置,往TabBarVC中添加了一个占位的控制器,同时系统会在TabBar相应的位置添加一个BarButtonItem.自定义按钮如果添加在BarButtonItem之前在viewDidLoad方法里面
,那么自定义按钮的单机事件就会被阻挡.
override func viewWillAppear(animated: Bool) {
super.viewWillAppear(animated)
// 添加中间按钮
// 按钮在viewDidLoad中添加,会被系统的BarButtonItem挡住,处理不了事件了
// viewWillAppear中添加按钮,在系统的BarButtonItem之后添加
self.tabBar.addSubview(composeBtn)
// 设置按钮的位置
let rect = self.tabBar.frame
let width = rect.width / CGFloat(childViewControllers.count)
composeBtn.frame = CGRect(x: 2 * width, y: 0, width: width, height: rect.height)
}
Swift开发小技巧--TabBar中间按钮的添加方案的更多相关文章
- Swift开发小技巧--private访问修饰符报错的情况
1.Swift中的访问修饰符(三个,作用:用来修饰属性,方法和类) public : 最大权限 -- 可以在当前framework和其他framework中访问 internal : 默认的权限 -- ...
- Swift开发小技巧--识别选中照片中的二维码
识别选中照片中的二维码 点击相册按钮,打开用户相册 @IBAction func photoBtnClick(sender: AnyObject) { // 打开相册 // 1.判断是否能够打开相册 ...
- Swift开发小技巧--自定义转场动画
自定义转场动画 个人理解为重写了被弹出控制器的modal样式,根据自己的样式来显示modal出来的控制器 例:presentViewController(aVC, animated: true, co ...
- Swift开发小技巧--自定义Log
Swift中的自定义Log OC中有宏的定义,可以定义自己的Log,但是Swif中没有宏的定义,想要实现类似OC中的自定义Log,必须实现以下操作 1.在AppDelegate.swift文件中定义一 ...
- Swift开发小技巧--扫描二维码,二维码的描边与锁定,设置扫描范围,二维码的生成(高清,无码,你懂得!)
二维码的扫描,二维码的锁定与描边,二维码的扫描范围,二维码的生成(高清,无码,你懂得!),识别相册中的二维码 扫描二维码用到的三个重要对象的关系,如图: 1.懒加载各种类 // MARK: - 懒加载 ...
- iOS开发小技巧 - label中的文字添加点击事件
Label中的文字添加点击事件 GitHub地址:https://github.com/lyb5834/YBAttributeTextTapAction 以前老师讲过类似的功能,自己懒得回头看了,找了 ...
- 移动Web开发小技巧
移动Web开发小技巧 添加到主屏后的标题(IOS) name="apple-mobile-web-app-title" content="标题"> 启用 ...
- Windows统一平台: 开发小技巧
Windows统一平台: 开发小技巧 技巧一: 在手机端拓展你应用的显示区域.(WP8.1中也适用) 对于Windows Phone系统的手机, 手机屏幕最上方为系统状态栏(System Tray), ...
- flex开发小技巧集锦
关于flex开发网上有非常多的相关信息介绍,因此我们要想学习关于flex开发的知识信息技能是一件非常简单和方便的事情.而针对于flex开发小编要告诉大家的是一些flex开发小技巧.利用这些小技巧能够有 ...
随机推荐
- HDU 5015 233 Matrix --矩阵快速幂
题意:给出矩阵的第0行(233,2333,23333,...)和第0列a1,a2,...an(n<=10,m<=10^9),给出式子: A[i][j] = A[i-1][j] + A[i] ...
- 【Unity3d】Ray射线初探-射线的原理及用法
http://www.xiaobao1993.com/231.html 射线是一个无穷的线,开始于origin并沿着direction方向. 当射线碰到物体后.它就会停止发射. 在屏幕中拉一个CUBE ...
- C# Interlocked 笔记
无锁代码下,在读写字段时使用内存屏障往往是不够的.在 64 位字段上进行加.减操作需要使用Interlocked工具类这样更加重型的方式.Interlocked也提供了Exchange和Compare ...
- https证书提供商
http://www.itrus.com.cn/verisignchina/About/aboutitrus/Index.html
- 深入了解Windows
1.1.什么是WindowMicrosoft Windows,是美国微软公司研发的一套操作系统,它问世于1985年,起初仅仅是Microsoft-DOS模拟环境,后续的系统版本由于微软不断的更新升级, ...
- 让IE10等支持classList2.0(转)
chrome24+, firesfox26+起支持classList2.0,即让它同时添加或删除多个类名, toggle方法支持第2个参数,用于强制添加或删除 var div = document.c ...
- sg函数与博弈论2
参考链接: http://blog.sina.com.cn/s/blog_51cea4040100h3l9.html 这篇主要就是讲anti-sg.multi-sg和every-sg的. 例1 poj ...
- ubuntu下nginx+php5的部署
ubuntu下nginx+php5环境的部署和centos系统下的部署稍有不同,废话不多说,以下为操作记录:1)nginx安装root@ubuntutest01-KVM:~# sudo apt-get ...
- 泛型中? super T和? extends T的区别
原文出处: 并发编程网 经常发现有List<? super T>.Set<? extends T>的声明,是什么意思呢?<? super T>表示包括T在内的任何T ...
- 启动Oracle
[oracle@redhat ~]$ su - oracle --“切换到oracle用户”Password:[oracle@redha ...