Skip to content

Instantly share code, notes, and snippets.

@wanbok
Created October 20, 2015 14:19
Show Gist options
  • Save wanbok/7be694b241f20965234a to your computer and use it in GitHub Desktop.
Save wanbok/7be694b241f20965234a to your computer and use it in GitHub Desktop.
extension UIButton {
private var normalBackgroundColor: UIColor? {
get {
return objc_getAssociatedObject(self, &NormalBackgroundColorKey) as? UIColor
}
set(newValue) {
objc_setAssociatedObject(self,
&NormalBackgroundColorKey, newValue, .OBJC_ASSOCIATION_RETAIN)
}
}
@IBInspectable var highlightedBackgroundColor: UIColor? {
get {
return objc_getAssociatedObject(self, &HighlightedBackgroundColorKey) as? UIColor
}
set(newValue) {
objc_setAssociatedObject(self,
&HighlightedBackgroundColorKey, newValue, .OBJC_ASSOCIATION_RETAIN)
}
}
@IBInspectable var disabledBackgroundColor: UIColor? {
get {
return objc_getAssociatedObject(self, &DisabledBackgroundColorKey) as? UIColor
}
set(newValue) {
objc_setAssociatedObject(self,
&DisabledBackgroundColorKey, newValue, .OBJC_ASSOCIATION_RETAIN)
}
}
override public var backgroundColor: UIColor? {
didSet {
if !enabled && !highlighted {
normalBackgroundColor = backgroundColor
}
}
}
private func getDisabledBackgroundColor() -> UIColor? {
return !enabled ? disabledBackgroundColor : nil
}
private func getHighlightedBackgroundColor() -> UIColor? {
return highlighted ? highlightedBackgroundColor : nil
}
private func setColor() {
backgroundColor = getDisabledBackgroundColor() ?? getHighlightedBackgroundColor() ?? normalBackgroundColor
}
override public var highlighted: Bool {
didSet {
setColor()
}
}
override public var enabled: Bool {
didSet {
setColor()
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment