【swift2】투명 UIButton의 하이라이트가 Storyboard로 설정할 수 있게 되는 Extension

경위


  • UIView 위에 투명 UIButton을 넣어 구현하는 것이 있었다

  • 문제점


  • default에서 하이라이트를 설정할 수있는 것은 Image 또는 BackgroundImage
  • 반투명 이미지를 준비하고 설정해도 크기가 바뀌면 귀찮아

  • 하고 싶은 것


  • 하이라이트시의 UIButton의 BackgroundColor를 설정하고 싶다
  • addTarget하는 방법도 있지만, 어쨌든 StoryBoard가 더 멋집니다
  • swift2.X에 대응하는 코드가 먼지
  • 김에 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을 두어도, 하이라이트가 알기 쉽게 되었다

  • 마지막으로


  • 그렇게 큰 일은 없습니다만, 참고까지 부디
  • 좋은 웹페이지 즐겨찾기