• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

Swift开发小技巧--TabBar中间按钮的添加方案

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

之前做百思项目的时候,也有一个中间按钮,当时是重写的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)
    }

鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
Swift学习笔记In-out形参发布时间:2022-07-13
下一篇:
Swift-重写UIKit框架类的init初始化方法(以UITabBarController为例) ...发布时间:2022-07-13
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap