zoukankan      html  css  js  c++  java
  • 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, height: rect.height)
        }
    
  • 相关阅读:
    密码强度正则表达式 – 必须包含大写字母,小写字母和数字,至少8个字符等
    |DataDirectory|的使用
    SqlParameter的作用与用法
    C# 通过http post 请求上传图片和参数
    webuploader批量导入文件
    MVC使用Controller完成登录验证
    网页特效 模板素材
    C#中的Cookie 添加 读取 删除
    JS jquery jquery.wordexport.js 实现导出word
    初始配置JDK
  • 原文地址:https://www.cnblogs.com/gchlcc/p/5625261.html
Copyright © 2011-2022 走看看