iOS 버튼에서 밑줄 제거하기: setTitle 대신 setAttributedTitle 활용하기

버튼의 텍스트에 밑줄이 자동으로 생기는 것을 방지하거나 제거해야 할 때가 있습니다. 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)

코드 분석

  1. NSAttributedStringKey.underlineStyle: 이 속성이 핵심입니다. NSUnderlineStyle.styleNone.rawValue를 설정하여 밑줄을 명시적으로 제거합니다.
  2. 폰트와 색상 속성도 동시에 설정할 수 있어 버튼의 전체적인 스타일링을 한 번에 제어할 수 있습니다.
  3. NSMutableAttributedString을 생성하여 버튼의 텍스트와 속성들을 결합합니다.
  4. 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() 등으로 간단하게 폰트 이름을 가져올 수 있어 가독성과 유지보수성이 향상됩니다.

추가 팁

  1. 다양한 버튼 상태 처리: .normal 외에도 .highlighted, .selected, .disabled 등 버튼의 여러 상태에 따라 다른 스타일을 적용할 수 있습니다.
  2. 속성 조합: 텍스트의 일부분만 다른 스타일을 적용하고 싶다면, NSMutableAttributedStringaddAttribute() 메서드를 사용하여 범위별로 다른 속성을 적용할 수 있습니다.
  3. 디버깅 도우미: 코드에 포함된 pwd() 확장 메서드는 디버깅 용도로, 현재 컨텍스트를 쉽게 식별할 수 있게 해줍니다.

NSAttributedString은 단순히 밑줄 제거뿐만 아니라, 텍스트 스타일링의 다양한 측면을 제어할 수 있는 강력한 도구입니다. 이를 통해 사용자 인터페이스의 세부 사항까지 완벽하게 제어할 수 있습니다.

코멘트

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다