【swift2】透明UIButtonのハイライトがStoryboardで設定できるようになーるExtension
5804 ワード
経緯
- UIViewの上に透明UIButtonを置いて実装することがあった
問題点
- defaultでハイライトの設定ができるのはImageとかBackgroundImage
- 半透明画像を用意して設定しても大きさが変わると面倒くさい
したいこと
- ハイライトのときのUIButtonのBackgroundColorを設定したい
- addTargetする方法もあるが、どーせならStoryBoardの方がかっこいい
- swift2.Xに対応したコードがほちい
- ついでにextension作ってしまおう!
Extension
private var HighlightedBackgroundColorKey = 0
private var NormalBackgroundColorKey = 0
extension UIButton {
@IBInspectable var highlightedBackgroundColor: UIColor? {
get {
return objc_getAssociatedObject(self, &HighlightedBackgroundColorKey) as? UIColor
}
set(newValue) {
objc_setAssociatedObject(self, &HighlightedBackgroundColorKey, newValue, .OBJC_ASSOCIATION_RETAIN)
}
}
private var normalBackgroundColor: UIColor? {
get {
return objc_getAssociatedObject(self, &NormalBackgroundColorKey) as? UIColor
}
set(newValue) {
objc_setAssociatedObject(self, &NormalBackgroundColorKey, newValue, .OBJC_ASSOCIATION_RETAIN)
}
}
override public var backgroundColor: UIColor? {
didSet {
if !highlighted {
normalBackgroundColor = backgroundColor
}
}
}
override public var highlighted: Bool {
didSet {
if let highlightedBackgroundColor = self.highlightedBackgroundColor {
if highlighted {
backgroundColor = highlightedBackgroundColor
} else {
backgroundColor = normalBackgroundColor
}
}
}
}
}
使い方
- UIButtonをどっかにおく!
- HighlighedColorが設定できる!
- defaultでハイライトの設定ができるのはImageとかBackgroundImage
- 半透明画像を用意して設定しても大きさが変わると面倒くさい
したいこと
- ハイライトのときのUIButtonのBackgroundColorを設定したい
- addTargetする方法もあるが、どーせならStoryBoardの方がかっこいい
- swift2.Xに対応したコードがほちい
- ついでにextension作ってしまおう!
Extension
private var HighlightedBackgroundColorKey = 0
private var NormalBackgroundColorKey = 0
extension UIButton {
@IBInspectable var highlightedBackgroundColor: UIColor? {
get {
return objc_getAssociatedObject(self, &HighlightedBackgroundColorKey) as? UIColor
}
set(newValue) {
objc_setAssociatedObject(self, &HighlightedBackgroundColorKey, newValue, .OBJC_ASSOCIATION_RETAIN)
}
}
private var normalBackgroundColor: UIColor? {
get {
return objc_getAssociatedObject(self, &NormalBackgroundColorKey) as? UIColor
}
set(newValue) {
objc_setAssociatedObject(self, &NormalBackgroundColorKey, newValue, .OBJC_ASSOCIATION_RETAIN)
}
}
override public var backgroundColor: UIColor? {
didSet {
if !highlighted {
normalBackgroundColor = backgroundColor
}
}
}
override public var highlighted: Bool {
didSet {
if let highlightedBackgroundColor = self.highlightedBackgroundColor {
if highlighted {
backgroundColor = highlightedBackgroundColor
} else {
backgroundColor = normalBackgroundColor
}
}
}
}
}
使い方
- UIButtonをどっかにおく!
- HighlighedColorが設定できる!
private var HighlightedBackgroundColorKey = 0
private var NormalBackgroundColorKey = 0
extension UIButton {
@IBInspectable var highlightedBackgroundColor: UIColor? {
get {
return objc_getAssociatedObject(self, &HighlightedBackgroundColorKey) as? UIColor
}
set(newValue) {
objc_setAssociatedObject(self, &HighlightedBackgroundColorKey, newValue, .OBJC_ASSOCIATION_RETAIN)
}
}
private var normalBackgroundColor: UIColor? {
get {
return objc_getAssociatedObject(self, &NormalBackgroundColorKey) as? UIColor
}
set(newValue) {
objc_setAssociatedObject(self, &NormalBackgroundColorKey, newValue, .OBJC_ASSOCIATION_RETAIN)
}
}
override public var backgroundColor: UIColor? {
didSet {
if !highlighted {
normalBackgroundColor = backgroundColor
}
}
}
override public var highlighted: Bool {
didSet {
if let highlightedBackgroundColor = self.highlightedBackgroundColor {
if highlighted {
backgroundColor = highlightedBackgroundColor
} else {
backgroundColor = normalBackgroundColor
}
}
}
}
}
使い方
- UIButtonをどっかにおく!
- HighlighedColorが設定できる!
- これで透明UIButtonをおいても、ハイライトがわかりやすくなった
最後に
- そんな大したことないですが、参考までにどうぞ
Author And Source
この問題について(【swift2】透明UIButtonのハイライトがStoryboardで設定できるようになーるExtension), 我々は、より多くの情報をここで見つけました https://qiita.com/okamu_/items/bbd5887a78559dd9d69b著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .