“on”상태에서 UISwitch 버튼 모양을 변경할 수 있다는 것을 배웠지 만 “off”상태에서 UISwitch의 색상을 변경할 수도 있습니까?
답변
# swift2를 사용한 내 솔루션 :
let onColor = _your_on_state_color
let offColor = _your_off_state_color
let mSwitch = UISwitch(frame: CGRectZero)
mSwitch.on = true
/*For on state*/
mSwitch.onTintColor = onColor
/*For off state*/
mSwitch.tintColor = offColor
mSwitch.layer.cornerRadius = mSwitch.frame.height / 2
mSwitch.backgroundColor = offColor
결과:
답변
이것을 사용해보십시오
yourSwitch.backgroundColor = [UIColor whiteColor];
youSwitch.layer.cornerRadius = 16.0;
@Barry Wyckoff 덕분입니다.
답변
tintColor
스위치 의 속성을 사용할 수 있습니다 .
switch.tintColor = [UIColor redColor]; // the "off" color
switch.onTintColor = [UIColor greenColor]; // the "on" color
iOS 5 이상이 필요합니다.
답변
답변
여기에 꽤 좋은 트릭이 있습니다. “off”배경을 그리는 UISwitch의 하위 뷰로 바로 이동하여 배경 색상을 변경할 수 있습니다. 이것은 iOS 12에서보다 iOS 13에서 훨씬 더 잘 작동합니다.
if #available(iOS 13.0, *) {
self.sw.subviews[0].subviews[0].backgroundColor = .green
} else if #available(iOS 12.0, *) {
self.sw.subviews[0].subviews[0].subviews[0].backgroundColor = .green
}
답변
UISwitch의 배경색 및 크기를 관리하는 가장 좋은 방법
지금은 Swift 2.3 코드입니다.
import Foundation
import UIKit
@IBDesignable
class UICustomSwitch : UISwitch {
@IBInspectable var OnColor : UIColor! = UIColor.blueColor()
@IBInspectable var OffColor : UIColor! = UIColor.grayColor()
@IBInspectable var Scale : CGFloat! = 1.0
override init(frame: CGRect) {
super.init(frame: frame)
self.setUpCustomUserInterface()
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
self.setUpCustomUserInterface()
}
func setUpCustomUserInterface() {
//clip the background color
self.layer.cornerRadius = 16
self.layer.masksToBounds = true
//Scale down to make it smaller in look
self.transform = CGAffineTransformMakeScale(self.Scale, self.Scale);
//add target to get user interation to update user-interface accordingly
self.addTarget(self, action: #selector(UICustomSwitch.updateUI), forControlEvents: UIControlEvents.ValueChanged)
//set onTintColor : is necessary to make it colored
self.onTintColor = self.OnColor
//setup to initial state
self.updateUI()
}
//to track programatic update
override func setOn(on: Bool, animated: Bool) {
super.setOn(on, animated: true)
updateUI()
}
//Update user-interface according to on/off state
func updateUI() {
if self.on == true {
self.backgroundColor = self.OnColor
}
else {
self.backgroundColor = self.OffColor
}
}
}
답변
Swift 4+에서 :
off
상태:
switch.tintColor = UIColor.blue
on
상태:
switch.onTintColor = UIColor.red