在Swift 5.0 版本下,總結(jié)基礎(chǔ)視圖UIButton
首先創(chuàng)建一個(gè)按鈕,初始值任意設(shè)定:
importUIKit
class ViewController: UIViewController {
? ? override func viewDidLoad() {
? ? ? ? super.viewDidLoad()
? ? ? ? // MARK: - 聲明一個(gè)按鈕與類(lèi)型
? ? ? ? letbutton:UIButton=UIButton(type: .system)
? ? ? ? // MARK: - 設(shè)定按鈕的坐標(biāo)值與大小
? ? ? ? button.frame=CGRect(x:100, y:100, width:100, height:100)
? ? ? ? // MARK: - 添加按鈕文字內(nèi)容
? ? ? ? button.setTitle("按鈕文字", for: .normal)
? ? ? ? // MARK: - 按鈕背景顏色更變
? ? ? ? button.titleLabel?.backgroundColor = .black
? ? ? ? // MARK: - 添加按鈕邊框和顏色
? ? ? ? button.layer.borderWidth=10
? ? ? ? button.layer.borderColor = UIColor.black.cgColor
? ? ? ? // MARK: - 添加視圖
? ? ? ? self.view.addSubview(button)
? ? ? ? // MARK: - 背景顏色為系統(tǒng)綠色
? ? ? ? self.view.backgroundColor = .systemGreen
? ? }
}
按鈕樣式:
UIButton(type: .custom) ??
按鈕沒(méi)有圖片,僅有白色文字,黑色邊框?yàn)榘粹o大小,點(diǎn)擊時(shí)無(wú)效果
UIButton(type: .system) ?
按鈕沒(méi)有圖片,僅有系統(tǒng)原定的藍(lán)色文字,點(diǎn)擊時(shí)有效果
UIButton(type: .contactAdd)?
按鈕自帶加號(hào)圖標(biāo),所有內(nèi)容顏色為系統(tǒng)原定藍(lán)色,點(diǎn)擊有效果
UIButton(type: .close) ?
按鈕自帶一個(gè)叉號(hào)和圓形陰影,點(diǎn)擊陰影等于點(diǎn)擊按鈕,實(shí)際按鈕范圍大于陰影范圍,點(diǎn)擊時(shí)有效果
UIButton(type: .detailDisclosure),UIButton(type: .infoDark),UIButton(type: .infoLight)
三者效果相同,原型I圖標(biāo)加文字,皆為系統(tǒng)默認(rèn)藍(lán)色,點(diǎn)擊有效果
按鈕坐標(biāo)與大小
button.frame=CGRect(x:int, y:int, width:int, height:int)
x:橫坐標(biāo),y:縱坐標(biāo),width:寬度,height:高度
一 ? ? ?按鈕文字與效果
button.setTitle(String, for: UIControl.State)
string:文本,按鈕的文字內(nèi)容,若設(shè)置的文字內(nèi)容長(zhǎng)度超過(guò)了按鈕的顯示范圍,則會(huì)省略文本的中端,顯示XXX...XXX的樣子,具體的指令會(huì)對(duì)此情況進(jìn)行約束,詳見(jiàn)二;
?UIControl.State:狀態(tài),表示在不同的狀態(tài)下顯示的效果.有以下幾種
.normal:正常狀態(tài)下效果 ; .highlighted 點(diǎn)擊時(shí)瞬間的效果(一直按住按鈕時(shí)的效果); ?.disabled: 按鈕禁用時(shí)效果; .selected 按鈕被選中時(shí)候的效果
注意:禁用模式命令如下
button.isEnabled = Bool
二 ?設(shè)置按鈕文本的顯示
注意:使用以下命令時(shí),按鈕樣式必須為定制,即為.custom,其他樣式無(wú)效.
button.titleLabel?.lineBreakMode = .byTruncatingHead\Middle\Tail? ?
根據(jù)末尾字節(jié)的不同,分別表示 前略后詳 例如: ?...XXXXX ; 中略前后詳細(xì) 例:XXX....XXX; 后略前詳 例:xxx.......?
.byClipping:效果類(lèi)似.byTruncatingTail,但是后部顯示不出部分不會(huì)用省略號(hào)代替? ? ?例XXXXXXXXX
.byWordWrapping 和 .byCharWrapping 兩者皆為自動(dòng)換行,但是前者會(huì)將一個(gè)詞語(yǔ)保證在一行,后者不會(huì);
例 AABBCCDDEE 前者會(huì) AABB換行CCDDEE 后者會(huì) AABBC 換行CDDEE
當(dāng)選擇以上兩個(gè)指令時(shí),可以通過(guò)在字符串添加 ??\n ? 來(lái)達(dá)成換行 ?例AA\nBB等于AA換行BB?
三 ? ?設(shè)置文本背景色與設(shè)置按鍵的背景色
button.titleLabel?.backgroundColor = UIColor?
表示設(shè)置按鈕文本的背景色
button.backgroundColor = UIColor ?
表示設(shè)置整個(gè)按鈕有效區(qū)域的背景色
助記:titleLabel跟文本有關(guān)系,一般僅僅修改文本而不是影響整個(gè)button的設(shè)定要在titleLabel下操作
四 ? 設(shè)置文本顏色
button.setTitleColor(UIColor?, for:UIControl.State)
UIColor:文本的色彩
UIControl.State:狀態(tài),其內(nèi)容與要求,與一中所述的狀態(tài)效果一致,表示在具體的狀態(tài)下顯示的顏色
五?設(shè)置文本字符
button.titleLabel?.font=UIFont.systemFont(ofSize:CGFloat)
CGFloat:填寫(xiě)需要的int字號(hào)即可
?六 設(shè)置陰影
button.setTitleShadowColor(UIColor?, for:UIControl.State)
UIColor:陰影的色彩
UIControl.State:狀態(tài),其內(nèi)容與要求,與一中所述的狀態(tài)效果一致,表示在具體的狀態(tài)下顯示的顏色
注意:必須要先設(shè)定陰影值才能出現(xiàn)效果
button.titleLabel?.shadowOffset = CGSize(width:int, height:int)
七 ?設(shè)置按鈕的圖片
button.setImage(UIImage(named:String), for: UIControl.State)
若是圖片加文字的按鈕,圖片會(huì)在文字左邊顯示
button.adjustsImageWhenDisabled = Bool
禁用模式下,圖片不會(huì)變暗
button.adjustsImageWhenHighlighted = Bool
點(diǎn)擊時(shí)圖片不會(huì)變暗(當(dāng)一直按住按鈕的時(shí)候)
注意: 當(dāng)狀態(tài)是.system的狀態(tài)下時(shí),圖片可能會(huì)變成系統(tǒng)原設(shè)定的顏色,當(dāng)是.custom時(shí),圖片為本色
注意:當(dāng)按鈕文字狀態(tài)需要.system時(shí),而圖片又想使用其本色時(shí)
let?xxx = UIImage(named:String)?.withRenderingMode(.alwaysOriginal)
設(shè)置按鈕的整個(gè)背景圖片時(shí)
button.setBackgroundImage(UIImage(named:"String"), for: UIControl.State)
八 ?按鈕的銳角值 邊框厚度 與 邊框顏色等設(shè)定
通過(guò)layer來(lái)設(shè)定按鈕的銳角與邊框等屬性
銳角值設(shè)定:
當(dāng)一個(gè)正方形按鈕,銳角值為邊長(zhǎng)的一般是,則為圓形
button.layer.cornerRadius = int
設(shè)定按鈕邊框的厚度
button.layer.borderWidth = int
設(shè)定邊框的顏色
button.layer.borderColor = UIColor.black.cgColor
masksToBounds指視圖的圖層上的子圖層,如果超出父圖層的部分就截取掉
?button.layer.masksToBounds = false
button.layer.masksToBounds = true
九 ?按鈕圖片和文本的位置調(diào)動(dòng)
調(diào)動(dòng)按鈕的圖片位置
button.imageEdgeInsets=UIEdgeInsetsMake(top:CGFloat,left:CGFloat,bottom:CGFloat,right:CGFloat)
調(diào)動(dòng)按鈕的文本位置
button.titleEdgeInsets=UIEdgeInsetsMake(top:CGFloat,left:CGFloat,bottom:CGFloat,right:CGFloat)
十 ? ?按鈕的點(diǎn)擊事件
importUIKit
class ViewController: UIViewController {
? ? override func viewDidLoad() {
? ? ? ? super.viewDidLoad()
? ? ? ? // MARK: - 聲明一個(gè)按鈕與類(lèi)型
? ? ? ? letbutton:UIButton=UIButton(type: .system)
? ? ? ? // MARK: - 設(shè)定按鈕的坐標(biāo)值與大小
? ? ? ? button.frame=CGRect(x:100, y:100, width:200, height:200)
? ? ? ? // MARK: - 添加按鈕文字內(nèi)容
? ? ? ? button.setTitle("按鈕文字", for: .normal)
? ? ? ? // MARK: - 添加視圖
? ? ? ? self.view.addSubview(button)
? ? ? ? // MARK: - 背景顏色為系統(tǒng)綠色
? ? ? ? self.view.backgroundColor = .systemGreen
? ? ? ? button.addTarget(self, action:#selector(dianji), for: .touchUpInside)
? ? }
? ? @objc?func?dianji(){
? ? ? ? print("dianji")
? ? }
}
網(wǎng)絡(luò)上能查到常用的觸摸事件類(lèi)型:
touchDown:?jiǎn)吸c(diǎn)觸摸按下事件酌摇,點(diǎn)觸屏幕
touchDownRepeat:多點(diǎn)觸摸按下事件,點(diǎn)觸計(jì)數(shù)大于1,按下第2朽缴、3或第4根手指的時(shí)候
touchDragInside:觸摸在控件內(nèi)拖動(dòng)時(shí)
touchDragOutside:觸摸在控件外拖動(dòng)時(shí)
touchDragEnter:觸摸從控件之外拖動(dòng)到內(nèi)部時(shí)
touchDragExit:觸摸從控件內(nèi)部拖動(dòng)到外部時(shí)
touchUpInside:在控件之內(nèi)觸摸并抬起事件
touchUpOutside:在控件之外觸摸抬起事件
touchCancel:觸摸取消事件沟涨,即一次觸摸因?yàn)榉派咸嗍种付蝗∠福蛘唠娫挻驍?/p>