[iOS] [Swift] 스토리 보드에서 버튼 배경색을 설정하고 싶습니다.
6524 단어 StoryboardiOSSwiftIBInspectable
안드로이드 보고 싶은, 단순히 drawable의 selector라든지의 xml을 써 배경에 지정하면 좋다, 라고 할 정도로 편한 방법이 없을 것 같았습니다.
하지만 IBInspectable을 사용하여 작은 커스텀 뷰를 만들어 Storyboard에서 지정할 수 있도록 하는 방법이 제일 확실히 왔으므로 메모해 둡니다.
전 자료: How to change the background color of a UIButton while it's highlighted?의 답변
방법
링크처가 굉장히 간단하기 때문에 방법 설명할 필요도 없습니다만, 이하의 커스텀 버튼을 구현해 storyboard에 둔 버튼에 관련짓는 것 뿐입니다.
BackgroundHighlightedButton.swiftclass 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가 어렵습니다 (+_+))
참고
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
}
}
}
}
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가 어렵습니다 (+_+))
참고
Reference
이 문제에 관하여([iOS] [Swift] 스토리 보드에서 버튼 배경색을 설정하고 싶습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/wasnot/items/3537d932e9550a5c4c27텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)