티스토리 뷰

반응형

 

 

안녕하세요. 멍구입니다. 🤗
종종 iOS개발 간 UILabel 하나의 텍스트 특정범위에 폰트크기, 색상, 배경색상 등의 속성을 부여하고 싶을때가 생기는데요. 이럴때 부분적인 속성 설정을 위해서 라벨을 여러개 생성해서 하는것은 매우 비효율적인 방법이죠. 

오늘은 하나의 UILabel 텍스트에 다양한 부분 속성을 설정하는 방법을 알아보겠습니다. 

 


UILabel 텍스트 특정범위에 다양한 속성을 부여하고 싶을때

오늘의 예제입니다. 상단에 표출되는 문구는 하나의 UILabel로 지정되어있습니다. 해당 텍스트 중에서 "타이틀 정보입니다.", "서브 텍스트 정보입니다." 의 문자 크기, 폰트설정을 따로 하고 싶은 상황입니다. 

물론 UILabel을 두개 설정해서 표현할 수도 있겠지만, 번거롭죠. 그래서 우리는 코드만을 이용해서 해당 문제를 해결해보려고 합니다. 
UILabel은 text 프로퍼티 이외에 attributedText라는 프로퍼티 설정을 지원합니다. Objective-C 객체인 NSMutableAttributedString 등을 UILabel 텍스트 문자열로 적용할 수 있는 건데요.

NSMutableAttributedString과 같은 문자열 객체는 swift의 String타입과 달리 부분적으로 각기 다른 세부 텍스트 설정을 줄 수 있는 장점이 있습니다. 해당 객체를 설정해서 텍스트의 부분 속성 적용을 해보겠습니다. 

 

 


UILabel의 attributedText, NSMutableAttributedString 활용 코드 예시

위의 코드는 앞서 보여드렸던 화면 예시에 사용했던 UILabel의 정의부입니다.
0) 먼저 기존 텍스트설정에 사용했던 titleLabel.text = ... 는 주석처리했습니다. 

1) 이후 앞서 말씀드렸던 NSMutableAttributedString(string:)을 설정하고 있습니다. 첫번째 인자에 기존에 사용하던 문자열을 넣어줍니다.

NSMutableAttributedString 생성 시, string: 인자 이외로 초기 속성을 부여할 수 있는 인자도 활용해서 초기 속성값을 설정해줄 수도 있습니다.

 

 

 

2) 범위 지정에 앞서 먼저 텍스트 길이 값을 stringLength에 받아두었습니다. 

3) 이제 NSMutableAttributedString 인스턴스에 NSRange로 범위를 잡아서 구간별로 텍스트의 폰트, 크기 등 다양한 속성을 추가합니다. 이후 앞서 생성했던 NSMutableAttributedString 인스턴스에 속성을 부여하는 작업을 수행합니다.

addAttributes(_ attrs: [NSAttributedString.Key : Any] = [:], range: NSRange)

NSMutableAttributedString 인스턴스의 문자열 속성을 다수 부여하고자 할 때 addAttributes 메서드를 사용할 수 있습니다. 해당 메서드를 통해 다양한 속성값을 딕셔너리 배열 형태로 지정할 수 있습니다.

가령 위의 코드에서는 .foregroundColor, .font를 지정하는 코드입니다. 키 값은 타입 추론이 되어 .foregroundColor와 같이 구체적인 타입을 지정할 필요가 없지만, 값은 UIFont, UIColor등의 타입을 구체적으로 지정해서 설정해주어야 합니다.

이후에 range 인자로 해당 속성값들을 적용할 문자열 범위를 지정해줍니다. NSRange를 통해 범위를 지정하게 되는데, location은 적용될 초기 위치, length는 시작위치로부터 속성을 적용할 문자열 길이를 지정해주면 됩니다.

location 지정 시, 인덱스가 0부터 시작함을 유의해서 지정해주어야 합니다. 만약 범위를 초과해서 지정할 경우, 런타임에러를 유발할 수 있습니다. 

 

 

 

이제 문자열 구간 별 원하는 속성을 추가했으면 해당 NSMutableAttributedString 인스턴스, attributedString을 UILabel 인스턴스의 attributedText 프로퍼티에 적용해줍니다.

그렇게 되면 실제 UI상에서 구간 별 문자열에 지정한 속성이 적용된 것을 확인할 수 있습니다.

 

 


UILabel의 attributedText 적용 결과

위와 같이 하나의 UILabel 텍스트 상에서 구간 별 세부적인 폰트, 크기 속성을 설정할 수 있는 것을 보실 수 있습니다.

 


지금까지 UILabel의 attributedText에 NSMutableAttributedString 인스턴스를 적용해서 텍스트 구간별 다수의 속성을 적용하는 방법을 알아보았습니다.

폰트, 글자 사이즈 이외에도 다양한 속성 부여가 가능한 만큼 매우 유용하고, 알아두면 반드시 쓸 일이 있을 기능인 만큼 잘 알아두면 좋을 것 같습니다. 🤗

 

 

 

반응형
댓글
반응형
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함