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开发小技巧.利用这些小技巧能够有 ...
随机推荐
- MMORPG大型游戏设计与开发(客户端架构)
首先为所有等待的朋友说一声歉意,实在让大家等的太久.客户端的设计本来就是一个大的工程,而且工作的关系,也没有太多时间在这方面做研究.不过在私下有空的时间,我还是继续着这方面的研究,很遗憾没有用期望的o ...
- Maven学习(八)继承和聚合
*聚合(多模块) 在一个项目中 往往有多个模块组成,例如有项目demo下面有a, b两个模块 为了能使用一条命令就能构建demo-a, demo-b两个模块, 需要创建一个额外的聚合模块, 然后通过该 ...
- Java MyEclipse下Ant build.xml简单实例详解
一.下载配置ant 1.首先下载ant: http://www.apache.org/ 下载最新的版本2.解压ant 后设置ANT_HOME, PATH中添加ANT_HOME目录下的bin目录(如:A ...
- Hibernate之组件映射
1:为什么要使用组件映射 答:建立关系数据模型的一个重要原则是在不会导致数据冗余的前提下,尽可能减少数据库表的数目及表之间的外键参照关系.以员工信息为例,员工信息中有员工的家庭地址信息,如果把地址信息 ...
- git删除分支|查看分支动态
git不能在当前分支下删除你当前所在的分支,比如你要删除new分支,而现在正在处于new分支下,则执行git branch -d new的时候会报错 error: Cannot delete bran ...
- workqueue机制分析之wb_workfn函数
上面一篇文章说到: process_one_work中最重要的一件事情就是worker->current_func(work); 这里就具体到一项很具体的任务了,由于我要研究文件系统嘛,所以很自 ...
- 4809 江哥的dp题c
4809 江哥的dp题c 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题解 题目描述 Description 有两个数x,y,一开始x=1,y= ...
- AngularJS中的指令
欢迎大家讨论与指导 : ) 前言 当AngularJS中的内置指令不能满足我们的需求,或者当我们需要创建一个能够用于多个AngularJS程序的自包含的功能单元时,我们应该创建自定义指令来满足需求. ...
- Centos6.4安装erlang并配置mysql数据库
在安装时,一定要使用Centos6.4光盘为yum源,否则可能使用了版本有问题的openssl 1.首先要先安装GCC GCC-C++ Openssl等依赖模块: yum -y install mak ...
- Scrapy 爬虫
Scrapy 爬虫 使用指南 完全教程 scrapy note command 全局命令: startproject :在 project_name 文件夹下创建一个名为 project_name ...