1.有的小伙伴希望自己在控制器的底部添加bottomBarButton,不知道如何下手,希望我下面這些代碼能幫到你們.
2.這個(gè)是我自己封裝的一個(gè)類:
import UIKit
class BottombarView: UIView {
//MARK:-自定義構(gòu)造函數(shù)
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.看一堆代碼真心煩,直接復(fù)制到自己創(chuàng)建的View中,在控制器中使用如下:
//希望添加3個(gè)按鈕
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個(gè)按鈕
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個(gè)按鈕
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顏色是我特殊處理了,你可以根據(jù)自己需求更改顏色代碼
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))
最后:希望能幫到一些小伙伴們更快捷的開發(fā)項(xiàng)目.