終於到了IBAction七人眾的最後一集,但UISwitch的內容好少喔!為什麼我的結局總是這麼虛弱?要被酸民攻擊爛尾了嗚嗚嗚QQ
UISwitch可以用來決定二選一的選擇,像是on/off。
當你改變switch狀態的時候,switch會發送一個valueChange的event並執行相對應的target-action。
switch只有on/off兩種state,可以用setOn(_:animated:)來決定初始的開關狀態,用isOn取得目前的開關狀態。isOn是一個布林值,如果開關的狀態為off,則isOn為false。
通常switch的target-action會利用isOn回傳的值做一個判斷式,以決定開關時分別執行的動作:
@objc func stateSwitch(_ sender: UISwitch) {
if sender.isOn {
boolLabel.text = "true"
boolLabel.textColor = UIColor.black
view.backgroundColor = UIColor.white
} else {
boolLabel.text = "false"
boolLabel.textColor = UIColor.white
view.backgroundColor = UIColor.black
}
}
還有另一種做法是extension Bool。
因為UISwitch本身就是一個on(true)/off(false)的二選一抉擇,所以可以直接在Bool裡extension prorerties,對true跟false的狀況分別做指定。
extension Bool {
var foregroundColor: UIColor {
return self ? UIColor.black : UIColor.white
}
var backgroundColor: UIColor {
return self ? UIColor.white : UIColor.black
}
}
上述程式碼定義了兩個變數,foregroundColor在true時為白色,false時為黑色,而backgroundColor相反。
接下來再把這2個變數分別指定給Label跟View:
let bool = sender.isOn
boolLabel.textColor = bool.foregroundColor
view.backgroundColor = bool.backgroundColor
在Label與背景顏色的轉換上也會與範例相同。
switch可以客製化開關與thumb的顏色,預設開關為綠色,thumb為白色。
newSwitch.onTintColor = UIColor.red
newSwitch.thumbTintColor = UIColor.yellow
這是一個超邊緣的property...
在很久很久以前,可以用onImage跟offImage分別設定on/off處的圖片,但這個property在iOS 7之後被改掉了。
注意我是說改掉不是拿掉...工程師們只是剝奪了他的功能,讓他毫無作用,卻沒有拿掉這個property。時至今日已經升級到了iOS 13,大家都搶著更新好捏自定義emoji跟玩馬利歐賽車,他卻都還沒有被處理掉。
我想,他應該已經被工程師們遺忘了吧!
幫QQ
那下一回終於要講他們的老大-UIControl。
到底這群8+9的老大是怎樣的一號人物呢?敬請期待~
LabelSwitch 也不錯 https://github.com/Cookiezby/LabelSwitch