美文网首页
Swift 自定义底部按钮

Swift 自定义底部按钮

作者: 平凡的心 | 来源:发表于2016-10-20 11:29 被阅读465次

    1.有的小伙伴希望自己在控制器的底部添加bottomBarButton,不知道如何下手,希望我下面这些代码能帮到你们.

    2.这个是我自己封装的一个类:

    import UIKit

    class BottombarView: UIView {

    //MARK:-自定义构造函数

    init(frame: CGRect, btnCount: Int, titles:[String], target:AnyObject?,actions:[Selector],colors:[UIColor]){

    super.init(frame: frame)

    self.translatesAutoresizingMaskIntoConstraints = false

    self.backgroundColor = .clearColor()

    // blur

    let effetView = UIVisualEffectView(effect: UIBlurEffect(style: .Light))

    effetView.translatesAutoresizingMaskIntoConstraints = false

    self.addSubview(effetView)

    NSLayoutConstraint(item: effetView, attribute: .Top, relatedBy: .Equal, toItem: self, attribute: .Top, multiplier: 1, constant: 0).active = true

    NSLayoutConstraint(item: effetView, attribute: .Bottom, relatedBy: .Equal, toItem: self, attribute: .Bottom, multiplier: 1, constant: 0).active = true

    NSLayoutConstraint(item: effetView, attribute: .Leading, relatedBy: .Equal, toItem: self, attribute: .Leading, multiplier: 1, constant: 0).active = true

    NSLayoutConstraint(item: effetView, attribute: .Trailing, relatedBy: .Equal, toItem: self, attribute: .Trailing, multiplier: 1, constant: 0).active = true

    // line

    let line = UIView()

    line.translatesAutoresizingMaskIntoConstraints = false

    line.backgroundColor = kLineColor

    self.addSubview(line)

    NSLayoutConstraint(item: line, attribute: .Top, relatedBy: .Equal, toItem: self, attribute: .Top, multiplier: 1, constant: 0).active = true

    NSLayoutConstraint(item: line, attribute: .Leading, relatedBy: .Equal, toItem: self, attribute: .Leading, multiplier: 1, constant: 0).active = true

    NSLayoutConstraint(item: line, attribute: .Trailing, relatedBy: .Equal, toItem: self, attribute: .Trailing, multiplier: 1, constant: 0).active = true

    NSLayoutConstraint(item: line, attribute: .Height, relatedBy: .Equal, toItem: nil, attribute: .NotAnAttribute, multiplier: 1, constant: 1).active = true

    addBottomBtn(btnCount, titles: titles, target: target, actions: actions, colors: colors)

    }

    private func addBottomBtn(btnCount: Int, titles:[String], target:AnyObject?,actions:[Selector],colors:[UIColor]) {

    switch btnCount {

    case 1:

    let btn1 = UIButton()

    btn1.translatesAutoresizingMaskIntoConstraints = false

    btn1.setTitle(NSLocalizedString(titles[0], comment: ""), forState: .Normal)

    btn1.setTitleColor(.whiteColor(), forState: .Normal)

    btn1.titleLabel?.font = kFontL

    btn1.backgroundColor = colors[0]

    btn1.layer.cornerRadius = 35/2

    btn1.layer.masksToBounds = true

    btn1.addTarget(target, action:actions[0], forControlEvents: .TouchUpInside)

    self.addSubview(btn1)

    NSLayoutConstraint(item: btn1, attribute: .CenterY, relatedBy: .Equal, toItem: self, attribute: .CenterY, multiplier: 1, constant: 0).active = true

    NSLayoutConstraint(item: btn1, attribute: .Leading, relatedBy: .Equal, toItem: self, attribute: .Leading, multiplier: 1, constant: 20).active = true

    NSLayoutConstraint(item: btn1, attribute: .Trailing, relatedBy: .Equal, toItem: self, attribute: .Trailing, multiplier: 1, constant: -20).active = true

    NSLayoutConstraint(item: btn1, attribute: .Height, relatedBy: .Equal, toItem: nil, attribute: .NotAnAttribute, multiplier: 1, constant: 35).active = true

    case 2:

    // buttons

    let btn1 = UIButton()

    btn1.translatesAutoresizingMaskIntoConstraints = false

    btn1.setTitle(NSLocalizedString(titles[0] , comment: ""), forState: .Normal)

    btn1.titleLabel?.font = kFontL

    if colors[0] == UIColor(hexString: "#a0a0a0") {

    btn1.setTitleColor(kTextColor2, forState: .Normal)

    btn1.layer.borderColor = colors[0].CGColor

    btn1.layer.borderWidth = 1

    } else {

    btn1.setTitleColor(.whiteColor(), forState: .Normal)

    btn1.backgroundColor = colors[0]

    }

    btn1.layer.cornerRadius = 35/2

    btn1.layer.masksToBounds = true

    btn1.addTarget(target, action: actions[0], forControlEvents: .TouchUpInside)

    btn1.tag = 1

    self.addSubview(btn1)

    let btn2 = UIButton()

    btn2.translatesAutoresizingMaskIntoConstraints = false

    btn2.setTitle(NSLocalizedString(titles[1], comment: ""), forState: .Normal)

    btn2.setTitleColor(.whiteColor(), forState: .Normal)

    btn2.titleLabel?.font = kFontL

    btn2.backgroundColor = colors[1]

    btn2.layer.cornerRadius = 35/2

    btn2.layer.masksToBounds = true

    btn2.addTarget(target, action: actions[1], forControlEvents: .TouchUpInside)

    btn2.tag = 2

    self.addSubview(btn2)

    NSLayoutConstraint(item: btn1, attribute: .Leading, relatedBy: .Equal, toItem: self, attribute: .Leading, multiplier: 1, constant: 20).active = true

    NSLayoutConstraint(item: btn1, attribute: .CenterY, relatedBy: .Equal, toItem: self, attribute: .CenterY, multiplier: 1, constant: 0).active = true

    NSLayoutConstraint(item: btn1, attribute: .Height, relatedBy: .Equal, toItem: nil, attribute: .NotAnAttribute, multiplier: 1, constant: 35).active = true

    NSLayoutConstraint(item: btn2, attribute: .Leading, relatedBy: .Equal, toItem: btn1, attribute: .Trailing, multiplier: 1, constant: 20).active = true

    NSLayoutConstraint(item: btn2, attribute: .Trailing, relatedBy: .Equal, toItem: self, attribute: .Trailing, multiplier: 1, constant: -20).active = true

    NSLayoutConstraint(item: btn2, attribute: .CenterY, relatedBy: .Equal, toItem: self, attribute: .CenterY, multiplier: 1, constant: 0).active = true

    NSLayoutConstraint(item: btn2, attribute: .Height, relatedBy: .Equal, toItem: nil, attribute: .NotAnAttribute, multiplier: 1, constant: 35).active = true

    NSLayoutConstraint(item: btn2, attribute: .Width, relatedBy: .Equal, toItem: btn1, attribute: .Width, multiplier: 1, constant: 0).active = true

    case 3:

    let btn1 = UIButton()

    btn1.translatesAutoresizingMaskIntoConstraints = false

    btn1.setTitle(NSLocalizedString(titles[0], comment: ""), forState: .Normal)

    btn1.titleLabel?.font = kFontL

    if colors[0] == UIColor(hexString: "#a0a0a0") {

    btn1.setTitleColor(kTextColor2, forState: .Normal)

    btn1.layer.borderColor = colors[0].CGColor

    btn1.layer.borderWidth = 1

    } else {

    btn1.setTitleColor(.whiteColor(), forState: .Normal)

    btn1.backgroundColor = colors[0]

    }

    btn1.layer.cornerRadius = 35/2

    btn1.layer.masksToBounds = true

    btn1.addTarget(target, action:actions[0], forControlEvents: .TouchUpInside)

    self.addSubview(btn1)

    let btn2 = UIButton()

    btn2.translatesAutoresizingMaskIntoConstraints = false

    btn2.setTitle(NSLocalizedString(titles[1], comment: ""), forState: .Normal)

    btn2.titleLabel?.font = kFontL

    if colors[1] == UIColor(hexString: "#a0a0a0") {

    btn2.setTitleColor(kTextColor2, forState: .Normal)

    btn2.layer.borderColor = colors[1].CGColor

    btn2.layer.borderWidth = 1

    } else {

    btn2.setTitleColor(.whiteColor(), forState: .Normal)

    btn2.backgroundColor = colors[1]

    }

    btn2.layer.cornerRadius = 35/2

    btn2.layer.masksToBounds = true

    btn2.addTarget(target, action:actions[1], forControlEvents: .TouchUpInside)

    self.addSubview(btn2)

    let btn3 = UIButton()

    btn3.translatesAutoresizingMaskIntoConstraints = false

    btn3.setTitle(NSLocalizedString(titles[2], comment: ""), forState: .Normal)

    btn3.setTitleColor(.whiteColor(), forState: .Normal)

    btn3.titleLabel?.font = kFontL

    btn3.backgroundColor = colors[2]

    btn3.layer.cornerRadius = 35/2

    btn3.layer.masksToBounds = true

    btn3.addTarget(target, action:actions[2], forControlEvents: .TouchUpInside)

    self.addSubview(btn3)

    NSLayoutConstraint(item: btn1, attribute: .Leading, relatedBy: .Equal, toItem: self, attribute: .Leading, multiplier: 1, constant: 15).active = true

    NSLayoutConstraint(item: btn1, attribute: .CenterY, relatedBy: .Equal, toItem: self, attribute: .CenterY, multiplier: 1, constant: 0).active = true

    NSLayoutConstraint(item: btn1, attribute: .Height, relatedBy: .Equal, toItem: nil, attribute: .NotAnAttribute, multiplier: 1, constant: 35).active = true

    NSLayoutConstraint(item: btn2, attribute: .Leading, relatedBy: .Equal, toItem: btn1, attribute: .Trailing, multiplier: 1, constant: 15).active = true

    NSLayoutConstraint(item: btn2, attribute: .CenterY, relatedBy: .Equal, toItem: self, attribute: .CenterY, multiplier: 1, constant: 0).active = true

    NSLayoutConstraint(item: btn2, attribute: .Height, relatedBy: .Equal, toItem: nil, attribute: .NotAnAttribute, multiplier: 1, constant: 35).active = true

    NSLayoutConstraint(item: btn2, attribute: .Width, relatedBy: .Equal, toItem: btn1, attribute: .Width, multiplier: 1, constant: 0).active = true

    NSLayoutConstraint(item: btn3, attribute: .Leading, relatedBy: .Equal, toItem: btn2, attribute: .Trailing, multiplier: 1, constant: 15).active = true

    NSLayoutConstraint(item: btn3, attribute: .Trailing, relatedBy: .Equal, toItem: self, attribute: .Trailing, multiplier: 1, constant: -15).active = true

    NSLayoutConstraint(item: btn3, attribute: .CenterY, relatedBy: .Equal, toItem: self, attribute: .CenterY, multiplier: 1, constant: 0).active = true

    NSLayoutConstraint(item: btn3, attribute: .Height, relatedBy: .Equal, toItem: nil, attribute: .NotAnAttribute, multiplier: 1, constant: 35).active = true

    NSLayoutConstraint(item: btn3, attribute: .Width, relatedBy: .Equal, toItem: btn1, attribute: .Width, multiplier: 1, constant: 0).active = true

    default:

    return

    }

    }

    required init?(coder aDecoder: NSCoder) {

    fatalError("init(coder:) has not been implemented")

    }

    }

    3.看一堆代码真心烦,直接复制到自己创建的View中,在控制器中使用如下:

    //希望添加3个按钮

    private lazy var bottomBar: UIView = {

    let action1 = #selector(btn1Click(_:))

    let action2 = #selector(btn2Click(_:))

    let action3 = #selector(btn3Click(_:))

    let view = BottombarView(frame: CGRect.zero, btnCount: 3, titles: ["按钮1","按钮2","按钮3"], target: self, actions: [action1, action2, action3], colors: [kTextColor3, kTextColor3, kPurpleColor])

    return view

    }()

    //希望添加2个按钮

    private lazy var bottomBar: UIView = {

    let action1 = #selector(btn1Click(_:))

    let action2 = #selector(btn2Click(_:))

    let view = BottombarView(frame: CGRect.zero, btnCount: 2, titles: ["按钮1","按钮2"], target: self, actions: [action1, action2], colors: [kTextColor3, kPurpleColor])

    return view

    }()

    //希望添加1个按钮

    private lazy var bottomBar: UIView = {

    let action1 = #selector(btn1Click(_:))

    let view = BottombarView(frame: CGRect.zero,btnCount: 1, titles: ["按钮1"], target: self, actions: [action1], colors: [kPurpleColor])

    return view

    }()

    注:colors是按钮的背景色,kTextColor3颜色是我特殊处理了,你可以根据自己需求更改颜色代码

    override func viewDidLoad() {

    super.viewDidLoad()

    // tableview

    self.tableView.tableFooterView = UIView(frame: CGRect(x: 0, y: 0, width: self.tableView.frame.width, height: 50))

    // bar

    view.addSubview(bottomBar)

    NSLayoutConstraint(item: bottomBar, attribute: .Bottom, relatedBy: .Equal, toItem: view, attribute: .Bottom, multiplier: 1, constant: 0).active = true

    NSLayoutConstraint(item: bottomBar, attribute: .Leading, relatedBy: .Equal, toItem: view, attribute: .Leading, multiplier: 1, constant: 0).active = true

    NSLayoutConstraint(item: bottomBar, attribute: .Trailing, relatedBy: .Equal, toItem: view, attribute: .Trailing, multiplier: 1, constant: 0).active = true

    NSLayoutConstraint(item: bottomBar, attribute: .Height, relatedBy: .Equal, toItem: nil, attribute: .NotAnAttribute, multiplier: 1, constant: 50).active = true

    }

    注:如果你写在tableView上需要加下面代码

    self.tableView.tableFooterView = UIView(frame: CGRect(x: 0, y: 0, width: self.tableView.frame.width, height: 50))

    最后:希望能帮到一些小伙伴们更快捷的开发项目.

    相关文章

      网友评论

          本文标题:Swift 自定义底部按钮

          本文链接:https://www.haomeiwen.com/subject/hdefuttx.html