LoginSignup
9
9

More than 5 years have passed since last update.

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

Posted at

経緯

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

Screen Shot 2016-03-29 at 11.07.25.png

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

最後に

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

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
9