UISwitch
UISwitch就是一個開關, 用起來也非常簡單, 下面我們學習如何使用它
1. UISwitch創建
let switchView = UISwitch(frame: CGRect(x: 200, y: 20, width: 300, height: 300))
switchView.on = false
self.view.addSubview(switchView)
運行程序:
我們發現,開關的on屬性可以控制UISwitch的開關狀態,UISwitch的寬高是固定的,如我們設置寬高爲300,300, 但它的實際大小是固定的.
2. UISwitch的定製
我們查看UISwitch的定義
@available(iOS 5.0, *)
public var onTintColor: UIColor? // 開狀態的顏色
@available(iOS 6.0, *)
public var tintColor: UIColor! // 關狀態的顏色
@available(iOS 6.0, *)
public var thumbTintColor: UIColor? // 中間小塊的顏色
@available(iOS 6.0, *)
public var onImage: UIImage? // 開狀態的圖片,這屬性沒用了
@available(iOS 6.0, *)
public var offImage: UIImage? // 關狀態的圖片,這屬性沒用了
現在我們完成一個定製需求:
開關的開狀態顏色是紅色,關狀態是黑色,中間小塊的顏色是粉色
switchView.onTintColor = UIColor.redColor()
switchView.tintColor = UIColor.blackColor()
switchView.thumbTintColor = UIColor.magentaColor()
運行程序
現在我們使用圖片試試:
switchView.onImage = UIImage(named: "onImage")
switchView.offImage = UIImage(named: "offImage")
運行程序:
我們發現,根本沒卵用, 然後查看文檔, 說ios7之後這兩屬性已經沒效果了.+_+!!
3. UISwitch狀態改變監聽
和UISlider非常類似, 監聽UIControlEvents.ValueChanged即可
switchView.addTarget(self, action: "switchChangeAction:", forControlEvents: .ValueChanged)
func switchChangeAction(sender: UISwitch) {
if(sender.on) {
print("開關已開")
} else {
print("開關已關")
}
}
運行程序, 我們切換開關的狀態, 控制檯會打印出不同的值
4. 完整代碼
import UIKit
class ViewController6: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
let switchView = UISwitch(frame: CGRect(x: 200, y: 20, width: 300, height: 300))
switchView.on = true
self.view.addSubview(switchView)
switchView.onTintColor = UIColor.redColor()
switchView.tintColor = UIColor.blackColor()
switchView.thumbTintColor = UIColor.magentaColor()
// switchView.onImage = UIImage(named: "onImage")
// switchView.offImage = UIImage(named: "offImage")
switchView.addTarget(self, action: "switchChangeAction:", forControlEvents: .ValueChanged)
}
func switchChangeAction(sender: UISwitch) {
if(sender.on) {
print("開關已開")
} else {
print("開關已關")
}
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}