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))
最后:希望能帮到一些小伙伴们更快捷的开发项目.