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中间按钮的添加方案的更多相关文章

  1. Swift开发小技巧--private访问修饰符报错的情况

    1.Swift中的访问修饰符(三个,作用:用来修饰属性,方法和类) public : 最大权限 -- 可以在当前framework和其他framework中访问 internal : 默认的权限 -- ...

  2. Swift开发小技巧--识别选中照片中的二维码

    识别选中照片中的二维码 点击相册按钮,打开用户相册 @IBAction func photoBtnClick(sender: AnyObject) { // 打开相册 // 1.判断是否能够打开相册 ...

  3. Swift开发小技巧--自定义转场动画

    自定义转场动画 个人理解为重写了被弹出控制器的modal样式,根据自己的样式来显示modal出来的控制器 例:presentViewController(aVC, animated: true, co ...

  4. Swift开发小技巧--自定义Log

    Swift中的自定义Log OC中有宏的定义,可以定义自己的Log,但是Swif中没有宏的定义,想要实现类似OC中的自定义Log,必须实现以下操作 1.在AppDelegate.swift文件中定义一 ...

  5. Swift开发小技巧--扫描二维码,二维码的描边与锁定,设置扫描范围,二维码的生成(高清,无码,你懂得!)

    二维码的扫描,二维码的锁定与描边,二维码的扫描范围,二维码的生成(高清,无码,你懂得!),识别相册中的二维码 扫描二维码用到的三个重要对象的关系,如图: 1.懒加载各种类 // MARK: - 懒加载 ...

  6. iOS开发小技巧 - label中的文字添加点击事件

    Label中的文字添加点击事件 GitHub地址:https://github.com/lyb5834/YBAttributeTextTapAction 以前老师讲过类似的功能,自己懒得回头看了,找了 ...

  7. 移动Web开发小技巧

    移动Web开发小技巧 添加到主屏后的标题(IOS) name="apple-mobile-web-app-title" content="标题"> 启用  ...

  8. Windows统一平台: 开发小技巧

    Windows统一平台: 开发小技巧 技巧一: 在手机端拓展你应用的显示区域.(WP8.1中也适用) 对于Windows Phone系统的手机, 手机屏幕最上方为系统状态栏(System Tray), ...

  9. flex开发小技巧集锦

    关于flex开发网上有非常多的相关信息介绍,因此我们要想学习关于flex开发的知识信息技能是一件非常简单和方便的事情.而针对于flex开发小编要告诉大家的是一些flex开发小技巧.利用这些小技巧能够有 ...

随机推荐

  1. CF 375B Maximum Submatrix 2[预处理 计数排序]

    B. Maximum Submatrix 2 time limit per test 2 seconds memory limit per test 512 megabytes input stand ...

  2. red5安装时候出现服务不能启动异常

    Exception java.lang.ClassCastException: org.slf4j.helpers.BasicMDCAdapter cannot be cast to ch.qos.l ...

  3. Android驱动入门-LED--测试APP编写③

    硬件平台: FriendlyARM Tiny4412 Cortex-A9 操作系统: UBUNTU 14.04 LTS 时间:2016-09-24  10:47:03 在Android Studio中 ...

  4. struts2配置详解

    01.Struts 2基本结构 使用Struts2框架实现用登录的功能,使用struts2标签和ognl表达式简化了试图的开发,并且利用struts2提供的特性对输入的数据进行验证,以及访问Servl ...

  5. JavaScript Array 对象

    JavaScript Array 对象 Array 对象 Array 对象用于在变量中存储多个值: var cars = ["Saab", "Volvo", & ...

  6. text

    链接: 初识 TextKit 如何实现自己没实现过的需求之文本动画

  7. windows下安装memcache的基本步骤

    本文主要解决的是window下memcached的安装的问题,在使用的过程中经常会被第一步环境的配置搞混,本文结合我的配置过程和遇到的问题,做一个总结 1,开启php memcache的扩展,在文件  ...

  8. Mysql LIMIT如何正确对其进行优化

    Mysql LIMIT如何正确对其进行优化 2010-05-17 17:09 佚名 博客园 字号:T | T 我们今天主要和大家分享的是Mysql LIMIT简单介绍以及如何进行优化的相关内容的描述, ...

  9. Windows 8.1 新增控件之 Flyout

    本篇为大家介绍Flyout 控件,Flyout 属于一种轻量级交互控件,可以支持信息提示或用户交互.与传统Dialog 控件不同的是Flyout 控件可通过直接点击对话框外部区域忽略. Flyout ...

  10. Cordova - 与iOS原生代码交互1(通过JS调用Swift方法)

    在前面的文章中介绍的了如何使用Cordova进行跨平台应用的开发,使用Cordova的话基本上就不需要在写系统原生代码了,只要通过编写html页面和js方法即可. 但在有些特殊情况下,还是是需要htm ...