[iOS] [Swift] 스토리 보드에서 버튼 배경색을 설정하고 싶습니다.

iOS는 초보자입니다만, Android와 같이 버튼의 배경을 state 마다 나누어 지정하고 싶습니다만, 조사하면 모두 커스텀 뷰를 구현하는지, 코드로 지정해 조금 귀찮습니다. .
안드로이드 보고 싶은, 단순히 drawable의 selector라든지의 xml을 써 배경에 지정하면 좋다, 라고 할 정도로 편한 방법이 없을 것 같았습니다.

하지만 IBInspectable을 사용하여 작은 커스텀 뷰를 만들어 Storyboard에서 지정할 수 있도록 하는 방법이 제일 확실히 왔으므로 메모해 둡니다.

전 자료: How to change the background color of a UIButton while it's highlighted?의 답변

방법



링크처가 굉장히 간단하기 때문에 방법 설명할 필요도 없습니다만, 이하의 커스텀 버튼을 구현해 storyboard에 둔 버튼에 관련짓는 것 뿐입니다.

BackgroundHighlightedButton.swift
class BackgroundHighlightedButton: UIButton {
    @IBInspectable var highlightedBackgroundColor :UIColor?
    @IBInspectable var nonHighlightedBackgroundColor :UIColor?
    override var highlighted :Bool {
        didSet {
            if highlighted {
                self.backgroundColor = highlightedBackgroundColor
            }
            else {
                self.backgroundColor = nonHighlightedBackgroundColor
            }
        }
    }
}

그러면 오른쪽 검사기에서 편집할 수 있습니다.



뭐, iOS 개발에서는 슬슬 InterfaceBuilder나 Storyboard를 사용할 수 있게 되어 왔다고 생각하기 때문에, 이런 사용법이 멘테라든지 즐거운-와 함께 사용해 보았습니다.

다른 방법



UIButton.setBackgroundImage:forState:



state마다 배경을 지정할 수 있으므로 여기에서 지정합니다.
인수는 UIImage이기도 하기 때문에, 위의 예와는 완전히 같지 않네요.
뭐, 간단하게 일색 칠의 버튼을 만드는 것도 별로 없다고 생각하므로 이쪽에서도 좋을까 생각합니다.

색을 넣고 싶을 때도 UIColor에서 UIImage를 만들면 좋을 것입니다.
extension UIButton {
    private func imageWithColor(color: UIColor) -> UIImage {
        let rect = CGRectMake(0.0, 0.0, 1.0, 1.0)
        UIGraphicsBeginImageContext(rect.size)
        let context = UIGraphicsGetCurrentContext()

        CGContextSetFillColorWithColor(context, color.CGColor)
        CGContextFillRect(context, rect)

        let image = UIGraphicsGetImageFromCurrentImageContext()
        UIGraphicsEndImageContext()

        return image
    }

    func setBackgroundColor(color: UIColor, forUIControlState state: UIControlState) {
        self.setBackgroundImage(imageWithColor(color), forState: state)
    }
}

이런 식으로 확장 메소드 setBackgroundColor:state를 추가하는 예도 있었습니다.

요약



평소 안드로이드 개발만 하면 iOS의 Storyboard나 Xib가 xml(plist)를 직접 꼬집지 않는 것이, 왠지 싫은 생각이 듭니다만, 프로퍼티 편집이 Android의 툴보다 확실히 할 수 있기 때문에, 가능한 한 필요 없애고 싶어요. .

그리고, 확장 메소드라든가를 추가하는 방법은 AndroidJava라면 아직 할 수 없기 때문에, 좋네요.
스스로 프로퍼티의 항목이 만지는 것은 재미있기 때문에 더 놀아 보려고 생각했습니다.

(Swift에서 가끔 놀면 Java가 어렵습니다 (+_+))

참고


  • How to change the background color of a UIButton while it's highlighted?
  • Change background color of UIButton when Highlighted
  • Storyboard에서만 UIButton을 둥글게! 사용자 정의 클래스에서 설정 항목을 확장!
  • 좋은 웹페이지 즐겨찾기