Swift/UILabel

[SWIFT]UILabel Extension 특정 단어만 컬러 및 폰트 변경

삽질중 2023. 5. 8. 16:45
import UIKit
extension UILabel {
    
    func setLinespace(spacing: CGFloat) {
        if let text = self.text {
            let attributeString = NSMutableAttributedString(string: text)
            let style = NSMutableParagraphStyle()
            
            style.lineSpacing = spacing
            attributeString.addAttribute(NSAttributedString.Key.paragraphStyle, value: style, range: NSMakeRange(0, attributeString.length))
            self.attributedText = attributeString
        }
    }
    
    /// Label 전체 텍스트에서 tagetString 색상만 변경
    func asColor(targetString: String, color: UIColor) {
        let fullText = text ?? ""
        let attributedString = NSMutableAttributedString(string: fullText)
        let range = (fullText as NSString).range(of: targetString)
        attributedString.addAttribute(.foregroundColor, value: color, range: range)
        attributedText = attributedString
    }
    
    /// Label 전체 텍스트에서 tagetString 폰트만 변경
    func asFont(targetString: String, font: UIFont) {
        let fullText = text ?? ""
        let attributedString = NSMutableAttributedString(string: fullText)
        let range = (fullText as NSString).range(of: targetString)
        attributedString.addAttribute(.font, value: font, range: range)
        attributedText = attributedString
    }
    
    /// Label 전체 텍스트에서 targetString 색상과 폰트 변경
    func asFontColor(targetString: String, font: UIFont?, color: UIColor?) {
        let fullText = text ?? ""
        let attributedString = NSMutableAttributedString(string: fullText)
        let range = (fullText as NSString).range(of: targetString)
        attributedString.addAttributes([.font: font as Any, .foregroundColor: color as Any], range: range)
        attributedText = attributedString
    }
    
    /// Label 전체 텍스트에서 tagetStringList 여러 텍스트 단어  색상과 폰트 변경
    func asFontColor(targetStringList: [String], font: UIFont?, color: UIColor?) {
        let fullText = text ?? ""
        let attributedString = NSMutableAttributedString(string: fullText)
        
        targetStringList.forEach {
            let range = (fullText as NSString).range(of: $0)
            attributedString.addAttributes([.font: font as Any, .foregroundColor: color as Any], range: range)
        }
        attributedText = attributedString
    }
    
}

 

사용방법

    /// 한문장(한단어) 컬러 색상을 변경시
    func asContentTextColorRange(text: String, color: UIColor) {
        self.contentLabel.asColor(targetString: text, color: color)
        
    }
    
    /// 여러 문장(단어) 컬러 색상을 변경시
    func asContentTextColorRange(textlist: [String], color: UIColor) {
        self.contentLabel.asFontColor(targetStringList: textlist, font: self.contentLabel.font, color: color)
    }