[카테고리:] 미분류

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