前言
今天本來(lái)只想寫個(gè)自適應(yīng)寬度的一排button的,可是又覺(jué)得太簡(jiǎn)單了,所以玩心大起就加上了控制界面,期間被更改已創(chuàng)建好的View難住了,只能通過(guò)暴力手段進(jìn)行更改了(刪除重新創(chuàng)建)
如果有網(wǎng)友有需求的話可以發(fā)給我,也許我明天的博客主題就是你的需求
效果圖
空隙全部相等
上代碼
先創(chuàng)建一個(gè)LineButton.swift繼承與NSObject的類然后加入一下代碼:
import UIKit
class LineButton: NSObject {
// button數(shù)組
var buttonArr:NSMutableArray = []
// 創(chuàng)建view方法
func creatLineButton(dataArr:NSMutableArray,buttonSize:CGSize) ->UIView {
// 最底層容器view
let myView = UIView(frame: CGRectMake(0,0,UIScreen.mainScreen().bounds.width,buttonSize.height))
// 計(jì)算空隙 空隙 = (總寬 - 所有button的寬)/空隙個(gè)數(shù)
let gap = CGFloat((myView.frame.size.width - (buttonSize.width*CGFloat(dataArr.count)))/(CGFloat(dataArr.count+1)))
for index in 0..<dataArr.count {
// 定義button
let button = UIButton(type: UIButtonType.System)
// 給frame
button.frame = CGRectMake((CGFloat(index+1))*gap + ((CGFloat(index)*buttonSize.width)), 0, buttonSize.width, buttonSize.height)
// 賦值
button.setTitle(dataArr[index] as? String, forState: UIControlState.Normal)
button.tintColor = UIColor.whiteColor()
button.backgroundColor = UIColor.lightGrayColor()
button.setTitle("選中", forState: UIControlState.Selected)
button.setTitleColor(UIColor.lightGrayColor(), forState: UIControlState.Selected)
button.titleLabel?.font = UIFont.systemFontOfSize(20)
// 同一個(gè)點(diǎn)擊方法 根據(jù)傳值和數(shù)組區(qū)分
button.addTarget(self, action: Selector("buttonClick:"), forControlEvents: UIControlEvents.TouchUpInside)
// 添加到view上
myView.addSubview(button)
// 加入button數(shù)組
buttonArr.addObject(button)
}
// 返回值
return myView
}
// 按鈕點(diǎn)擊事件
func buttonClick(button:UIButton){
for b in buttonArr{
// 遍歷按鈕數(shù)組,如果相同就改成選中狀態(tài),不相同就取消選中狀態(tài)
if (b as! UIButton) == button{
(b as! UIButton).selected = true
}else{
(b as! UIButton).selected = false
}
}
print(button.titleLabel!.text!)
}
}
然后在ViewController.swift里添加以下代碼:
import UIKit
var dataArr:NSMutableArray = ["按鈕1","按鈕2","按鈕3"]
class ViewController: UIViewController {
// stroyBoard控件 (沒(méi)啥用)
@IBOutlet weak var myslider: UISlider!
@IBOutlet weak var topTitle: UILabel!
// 把類定義成屬性
let linebutton = LineButton()
// view
var buttonView:UIView!
override func viewDidLoad() {
super.viewDidLoad()
// 搭建view
layoutView()
}
func layoutView(){
topTitle.text = "按鈕個(gè)數(shù):\\(Int(myslider.value))"
// 先刪除
if buttonView != nil{
buttonView.removeFromSuperview()
buttonView = nil
}
// 再創(chuàng)建
buttonView = linebutton.creatLineButton(dataArr, buttonSize: CGSizeMake(60, 50))
buttonView.center = view.center
self.view.addSubview(buttonView)
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
// 添加按鈕點(diǎn)擊事件
@IBAction func addButton(sender: UIButton) {
if myslider.value == 5{
return;
}
// slider.value+1
myslider.value = myslider.value+1;
// 數(shù)組添加值
let str = "按鈕\\(dataArr.count+1)"
dataArr.addObject(str)
// 重新搭建view
layoutView()
}
// 減少按鈕點(diǎn)擊時(shí)間
@IBAction func subButton(sender: UIButton) {
if myslider.value == 1{
return;
}
myslider.value = myslider.value-1;
// 刪除數(shù)組最后一個(gè)值
dataArr.removeObjectAtIndex(dataArr.count-1)
// 重新搭建view
layoutView()
}
}
效果
按鈕寬度固定自動(dòng)對(duì)其
GitHub:https://github.com/Lafree317/Swift-LineButton
本人還是一只小菜雞,不過(guò)是一只熱心腸的菜雞,如果有需要幫助或者代碼中有更好的建議的話可以發(fā)郵件到lafree317@163.com中,我們一起進(jìn)步XD