버그 잡이

Swift - Attributed String으로 특정 글자만 색상 바꾸기 본문

Swift

Swift - Attributed String으로 특정 글자만 색상 바꾸기

버그잡이 2020. 10. 6. 22:35

https://www.hackingwithswift.com/articles/113/nsattributedstring-by-example

 

위 글을 참고하여 작성한 글임을 밝힙니다.

 


 

string은 간단한 text를 표현하기에는 좋은 도구이지만 text 일부분에만 색상을 입히고, 밑줄을 치는 등의 효과를 주기 위해서는 AttributedString을 알아야 합니다.

 

Attributed String 만들기

 

let quote = "Haters gonna hate"
let attributedQuote = NSAttributedString(string: quote)

위 코드가 출력된 결과는 string과 차이가 없습니다. 특성을 하나씩 줘보겠습니다.

 

 

  • font 바꾸기
let quote = "Haters gonna hate"
let font = UIFont.systemFont(ofSize: 72)
let attributes = [NSAttributedString.Key.font: font]
let attributedQuote = NSAttributedString(string: quote, attributes: attributes)

 

  • font + 글자 색상
let font = UIFont.systemFont(ofSize: 72)
let attributes: [NSAttributedString.Key: Any] = [
    .font: font,
    .foregroundColor: UIColor.red,
]

 

  • font + 글자 색상 + 그림자
let font = UIFont.systemFont(ofSize: 72)
let shadow = NSShadow()
shadow.shadowColor = UIColor.red
shadow.shadowBlurRadius = 5

let attributes: [NSAttributedString.Key: Any] = [
    .font: font,
    .foregroundColor: UIColor.white,
    .shadow: shadow
]

 

 

Attributed String 수정하기

 

위에서 살펴 본 방법은 attributed string을 만드는 방법입니다.

이번에는 기존에 존재하는 attributed string을 수정하는 방법에 대해서 알아보겠습니다.

 

.addAttribute()를 통해서 특성을 추가할 수 있습니다.

let quote = "Haters gonna hate"
let attributedQuote = NSMutableAttributedString(string: quote)

attributedQuote.addAttribute(.foregroundColor, value: UIColor.red, range: NSRange(location: 7, length: 5))

 

range는 string의 특정 텍스트만 특성을 바꿀 수 있게 해줍니다.

위 결과 "Hatters gonna hate" 에서 gonna만 빨간 글자로 나오게 되지요.

이렇게 String의 일부분만 다른 색상으로 바꿀 수 있습니다.

이와 같은 원리로 일부분만 Bold 처리하는 등의 다양한 효과를 줄 수 있습니다.

반응형
Comments