Swift开发小技巧--TabBar中间按钮的添加方案
2016-06-28 22:42
399 查看
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 Study Day 2
- 在Storyboard中勾选hide bottom bar on push时,底部View下沉的问题
- 【Swift】Runtime动态性分析
- 【Swift】Runtime动态性分析
- 详解Swift中enum枚举类型的用法
- Swift 中调试状态下打印日志
- Swift -- 8.3 多态
- swift--Swift中String和Character的使用与总结
- 十款不容错过的Swift iOS开源项目及介绍
- 十款不容错过的Swift iOS开源项目及介绍
- Swift String
- 跑马灯动画点击事件
- Swift -- 8.2 类的构造与析构
- Swift -- 8.1 继承
- oc转swift基本语法一
- swift2.0 学习笔记Twenty-two
- [Swift]Swift中使用闭包实现block回调事件
- Swift NSDate的一个分类,把"Mon Apr 04 19:45:37 +0800 2016"这种格式的时间转换为"2016-04-04 11:45:37 +0000"
- Swift基础之实现时间线列表效果(例如订单详情页面的效果)
- Swift 运算符重载