버튼의 텍스트에 밑줄이 자동으로 생기는 것을 방지하거나 제거해야 할 때가 있습니다. iOS 개발에서 이러한 스타일링 요소를 제어하는 방법에 대해 알아보겠습니다.
문제 상황
기본적으로 iOS의 UIButton에 setTitle() 메서드를 사용하여 텍스트를 설정하면, 특정 상황에서 텍스트에 밑줄이 생길 수 있습니다. 이는 특히 버튼이 링크처럼 동작해야 할 때 자동으로 적용되는 스타일링입니다.
해결 방법: NSAttributedString 활용
이 문제를 해결하기 위한 가장 효과적인 방법은 setTitle()
대신 setAttributedTitle()
메서드를 사용하는 것입니다. 이 방법을 통해 텍스트의 다양한 속성(폰트, 색상, 밑줄 등)을 세밀하게 제어할 수 있습니다.
다음은 버튼 텍스트의 밑줄을 제거하는 코드 예시입니다:
let yourAttributes: [NSAttributedStringKey: Any] = [
NSAttributedStringKey.font: UIFont(name: "".font1(), size: 14)!,
NSAttributedStringKey.foregroundColor: UIColor.black,
NSAttributedStringKey.underlineStyle: NSUnderlineStyle.styleNone.rawValue
]
let attributeString = NSMutableAttributedString(string: "TxtWhatYouWantToWrite",
attributes: yourAttributes)
btn.setAttributedTitle(attributeString, for: .normal)
btn.endEditing(false)
코드 분석
NSAttributedStringKey.underlineStyle
: 이 속성이 핵심입니다.NSUnderlineStyle.styleNone.rawValue
를 설정하여 밑줄을 명시적으로 제거합니다.- 폰트와 색상 속성도 동시에 설정할 수 있어 버튼의 전체적인 스타일링을 한 번에 제어할 수 있습니다.
NSMutableAttributedString
을 생성하여 버튼의 텍스트와 속성들을 결합합니다.setAttributedTitle()
메서드로 버튼에 적용합니다. 이때 상태(.normal
)도 지정할 수 있습니다.
커스텀 폰트 활용
예시 코드에서는 커스텀 폰트를 사용하기 위해 String 확장을 활용했습니다. 이는 프로젝트 전체에서 일관된 폰트 사용을 위한 좋은 방법입니다:
extension String {
func font1() -> String {
return "NanumSquareOTFR"
}
func font1L() -> String {
return "NanumSquareOTFL"
}
func font1B() -> String {
return "NanumSquareOTFB"
}
func font2() -> String {
return "Pecita"
}
}
이 확장을 통해 코드 어디에서나 "".font1()
, "".font1B()
등으로 간단하게 폰트 이름을 가져올 수 있어 가독성과 유지보수성이 향상됩니다.
추가 팁
- 다양한 버튼 상태 처리:
.normal
외에도.highlighted
,.selected
,.disabled
등 버튼의 여러 상태에 따라 다른 스타일을 적용할 수 있습니다. - 속성 조합: 텍스트의 일부분만 다른 스타일을 적용하고 싶다면,
NSMutableAttributedString
의addAttribute()
메서드를 사용하여 범위별로 다른 속성을 적용할 수 있습니다. - 디버깅 도우미: 코드에 포함된
pwd()
확장 메서드는 디버깅 용도로, 현재 컨텍스트를 쉽게 식별할 수 있게 해줍니다.
NSAttributedString은 단순히 밑줄 제거뿐만 아니라, 텍스트 스타일링의 다양한 측면을 제어할 수 있는 강력한 도구입니다. 이를 통해 사용자 인터페이스의 세부 사항까지 완벽하게 제어할 수 있습니다.
답글 남기기