很多時(shí)候需要按鈕點(diǎn)擊變色, UI 設(shè)計(jì)師給了點(diǎn)擊的顏色和標(biāo)題的顏色, 假設(shè)按下的背景色是黃色(yellow),標(biāo)題色是白色(white), 而普通狀態(tài)下的背景色是紅色(red), 標(biāo)題色是綠色(green) 則可以這樣:
btn.backgroundColor = UIColor.red // 初始的背景色, 即普通狀態(tài)下的背景色
btn.setTitleColor(UIColor.green, for: .normal) // 設(shè)置普通狀態(tài)下的標(biāo)題顏色
btn.setTitleColor(UIColor.white, for: .highlighted) // 設(shè)置點(diǎn)擊狀態(tài)下的標(biāo)題顏色
// 在 touchDown 事件 action 里改變背景色
btn.addTarget(self, action: #selector(btnTouchDown), for: .touchDown)
// 在 touchUpInside 事件 action 里面恢復(fù)背景色
btn.addTarget(self, action: #selector(btnTouchUpInside), for: .touchUpInside)
兩個(gè)事件處理方法如下所示:
@objc func btnTouchDown() {// 點(diǎn)擊改變背景色
btn.backgroundColor = UIColor.yellow
}
@objc func btnTouchUpInside() {// 恢復(fù)背景色
btn.backgroundColor = UIColor.red
}
一個(gè)與上面方式關(guān)聯(lián)的小問(wèn)題的處理
但是這里還有一個(gè)小問(wèn)題, 假如用戶按住按鈕不放, 然后用手指拖動(dòng)出來(lái)的時(shí)候, 會(huì)發(fā)現(xiàn)標(biāo)題變色了, 但是背景色沒(méi)有變, 從而造成錯(cuò)誤的顯示.
所以還需要對(duì) drag 事件進(jìn)行處理, 即當(dāng)用戶在按鈕的區(qū)域內(nèi)按下不放, 然后手指拖動(dòng)出來(lái)時(shí), 恢復(fù)為默認(rèn)的顏色(當(dāng)然也可以處理成自己想要的效果):
btn.addTarget(self, action: #selector(btnDragExit), for: .touchDragExit)
對(duì)應(yīng)的 action 方法:
@objc func btnDragExit() {
btn.backgroundColor = UIColor.red
}