Skip to content

Instantly share code, notes, and snippets.

@qmchenry
Last active November 23, 2021 18:18
Show Gist options
  • Save qmchenry/72a4e44faa311d4f09f6 to your computer and use it in GitHub Desktop.
Save qmchenry/72a4e44faa311d4f09f6 to your computer and use it in GitHub Desktop.
Swift UIButton subclass that implements toggle and backgroundColor for states
import UIKit
class QButton: UIButton {
var isToggle: Bool = false {
didSet {
if isToggle {
self.addTarget(self, action: Selector("touchUpInside:"), forControlEvents: .TouchUpInside)
} else {
self.removeTarget(self, action: Selector("touchUpInside:"), forControlEvents: .TouchUpInside)
}
}
}
var backgroundColorNormal: UIColor? {
didSet {
backgroundColor = backgroundColorNormal
}
}
var backgroundColorHighlighted: UIColor?
var _backgroundColorHighlighted: UIColor? {
return backgroundColorHighlighted != nil ? backgroundColorHighlighted : backgroundColorNormal
}
var backgroundColorSelected: UIColor?
var _backgroundColorSelected: UIColor? {
return backgroundColorSelected != nil ? backgroundColorSelected : _backgroundColorHighlighted
}
var backgroundColorHighlightedSelected: UIColor?
var _backgroundColorHighlightedSelected: UIColor? {
return backgroundColorHighlightedSelected != nil ? backgroundColorHighlightedSelected : _backgroundColorHighlighted
}
override var highlighted: Bool {
didSet {
switch (highlighted, selected) {
case (true, false):
backgroundColor = _backgroundColorHighlighted
case (true, true):
backgroundColor = _backgroundColorHighlightedSelected
case (false, true):
backgroundColor = _backgroundColorSelected
default:
backgroundColor = backgroundColorNormal
}
}
}
func touchUpInside(sender: UIButton!) {
selected = ~selected
}
}
// func setBGColor(color: UIColor?, forState state: UIControlState) {
// switch state {
// case UIControlState.Highlighted:
// println("normal")
// case UIControlState.Selected:
// println("normal")
// case UIControlState.Normal:
// println("normal")
// case UIControlState.Highlighted | UIControlState.Selected:
// println("normal")
// default: break
// }
// }
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment