【swift2】透明UIButtonのハイライトがStoryboardで設定できるようになーるExtension


経緯

  • 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が設定できる!

  • これで透明UIButtonをおいても、ハイライトがわかりやすくなった

最後に

  • そんな大したことないですが、参考までにどうぞ