एक लेबल में कई फ़ॉन्ट रंगों का उपयोग करें


89

क्या आईओएस में एक लेबल में दो, या यहां तक ​​कि तीन फ़ॉन्ट रंगों का उपयोग करने का एक तरीका है?

यदि पाठ "हैलो, आप कैसे हैं" का उपयोग उदाहरण के रूप में किया गया था, तो "हैलो," नीला होगा, और "आप कैसे हैं" हरा होगा?

क्या यह संभव है, यह कई लेबल बनाने से आसान लगता है?


UILabel की जिम्मेदार टेक्स्ट प्रॉपर्टी का उपयोग करने का प्रयास करें। stackoverflow.com/questions/3586871/…
राकेशबस

आप स्ट्रिंग में रंग रेंज करना चाहते हैं
किरीट मोदी

जवाबों:


151

यहाँ से संदर्भ

सबसे पहले आप NSString और NSMutableAttributedString को नीचे के रूप में देखें।

var myString:NSString = "I AM KIRIT MODI"
var myMutableString = NSMutableAttributedString()

में viewDidLoad

override func viewDidLoad() {

    myMutableString = NSMutableAttributedString(string: myString, attributes: [NSFontAttributeName:UIFont(name: "Georgia", size: 18.0)!])
    myMutableString.addAttribute(NSForegroundColorAttributeName, value: UIColor.redColor(), range: NSRange(location:2,length:4))
    // set label Attribute
    labName.attributedText = myMutableString
    super.viewDidLoad()
}

आउटपुट

यहाँ छवि विवरण दर्ज करें

बहु रंग

एक स्ट्रिंग में कई रंग प्राप्त करने के लिए अपने ViewDidLoad में नीचे लाइन कोड जोड़ें।

 myMutableString.addAttribute(NSForegroundColorAttributeName, value: UIColor.greenColor(), range: NSRange(location:10,length:5))

एकाधिक रंग OUTPUT

यहाँ छवि विवरण दर्ज करें

स्विफ्ट 4

var myMutableString = NSMutableAttributedString(string: str, attributes: [NSAttributedStringKey.font :UIFont(name: "Georgia", size: 18.0)!])
myMutableString.addAttribute(NSAttributedStringKey.foregroundColor, value: UIColor.red, range: NSRange(location:2,length:4))

1
क्या आप दो रेंज प्रॉपर्टीज जोड़ सकते हैं, यदि नहीं, तो मुझे कैसे मिलेगा?
जस्टिन रोज़

61

@ हेम्स मोरदिया के लिए

यहाँ छवि विवरण दर्ज करें

let attrs1 = [NSFontAttributeName : UIFont.boldSystemFontOfSize(18), NSForegroundColorAttributeName : UIColor.greenColor()]

let attrs2 = [NSFontAttributeName : UIFont.boldSystemFontOfSize(18), NSForegroundColorAttributeName : UIColor.whiteColor()]

let attributedString1 = NSMutableAttributedString(string:"Drive", attributes:attrs1)

let attributedString2 = NSMutableAttributedString(string:"safe", attributes:attrs2)

attributedString1.appendAttributedString(attributedString2)
self.lblText.attributedText = attributedString1

स्विफ्ट 4

    let attrs1 = [NSAttributedStringKey.font : UIFont.boldSystemFont(ofSize: 18), NSAttributedStringKey.foregroundColor : UIColor.green]

    let attrs2 = [NSAttributedStringKey.font : UIFont.boldSystemFont(ofSize: 18), NSAttributedStringKey.foregroundColor : UIColor.white]

    let attributedString1 = NSMutableAttributedString(string:"Drive", attributes:attrs1)

    let attributedString2 = NSMutableAttributedString(string:"safe", attributes:attrs2)

    attributedString1.append(attributedString2)
    self.lblText.attributedText = attributedString1

स्विफ्ट 5

    let attrs1 = [NSAttributedString.Key.font : UIFont.boldSystemFont(ofSize: 18), NSAttributedString.Key.foregroundColor : UIColor.green]

    let attrs2 = [NSAttributedString.Key.font : UIFont.boldSystemFont(ofSize: 18), NSAttributedString.Key.foregroundColor : UIColor.white]

    let attributedString1 = NSMutableAttributedString(string:"Drive", attributes:attrs1)

    let attributedString2 = NSMutableAttributedString(string:"safe", attributes:attrs2)

    attributedString1.append(attributedString2)
    self.lblText.attributedText = attributedString1

40

स्विफ्ट 4

निम्नलिखित एक्सटेंशन फ़ंक्शन का उपयोग करके, आप सीधे एक जिम्मेदार स्ट्रिंग के लिए एक रंग विशेषता सेट कर सकते हैं और अपने लेबल पर समान लागू कर सकते हैं।

extension NSMutableAttributedString {

    func setColorForText(textForAttribute: String, withColor color: UIColor) {
        let range: NSRange = self.mutableString.range(of: textForAttribute, options: .caseInsensitive)

        // Swift 4.2 and above
        self.addAttribute(NSAttributedString.Key.foregroundColor, value: color, range: range)

        // Swift 4.1 and below
        self.addAttribute(NSAttributedStringKey.foregroundColor, value: color, range: range)
    }

}

एक लेबल का उपयोग करके विस्तार से ऊपर की कोशिश करें:

let label = UILabel()
label.frame = CGRect(x: 60, y: 100, width: 260, height: 50)
let stringValue = "stackoverflow"

let attributedString: NSMutableAttributedString = NSMutableAttributedString(string: stringValue)
attributedString.setColorForText(textForAttribute: "stack", withColor: UIColor.black)
attributedString.setColorForText(textForAttribute: "over", withColor: UIColor.orange)
attributedString.setColorForText(textForAttribute: "flow", withColor: UIColor.red)
label.font = UIFont.boldSystemFont(ofSize: 40)

label.attributedText = attributedString
self.view.addSubview(label)

परिणाम:

यहाँ छवि विवरण दर्ज करें


@Krunal रंग बदलने के लिए कई तार का समर्थन करने के लिए इसे कैसे संशोधित किया जा सकता है ...? मेरे पास एक लंबी स्ट्रिंग है जिसके नीचे हेडर हैं ------------, लेकिन ऊपर दिया गया कोड ठीक काम करता है लेकिन यह केवल पहले पाए गए रंगों को रंगता है। क्या यह सब करने के लिए संशोधित किया जा सकता है --------- एक निश्चित रंग में तार ....? धन्यवाद।
ओमिड कॉम्प्सी

यह इस तरह से पाठ के लिए काम नहीं करेगा: "flowstackoverflow" यह केवल पहले प्रवाह को बदल देगा, लेकिन हमें अंतिम एक की आवश्यकता है, इसे कैसे प्राप्त करें?
स्विफ्ट

19

स्विफ्ट 4 के लिए अपडेट किया गया उत्तर

आप आसानी से विभिन्न टेक्स्ट फ़ॉर्मेटिंग करने के लिए आसानी से यूआईबेल के एट्रिब्यूटेड टेक्स्ट संपत्ति के अंदर HTML का उपयोग कर सकते हैं।

 let htmlString = "<font color=\"red\">This is  </font> <font color=\"blue\"> some text!</font>"

    let encodedData = htmlString.data(using: String.Encoding.utf8)!
    let attributedOptions = [NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType]
    do {
        let attributedString = try NSAttributedString(data: encodedData, options: attributedOptions, documentAttributes: nil)
        label.attributedText = attributedString

    } catch _ {
        print("Cannot create attributed String")
    }

यहाँ छवि विवरण दर्ज करें

स्विफ्ट 2 के लिए अपडेट किया गया उत्तर

let htmlString = "<font color=\"red\">This is  </font> <font color=\"blue\"> some text!</font>"

let encodedData = htmlString.dataUsingEncoding(NSUTF8StringEncoding)!
let attributedOptions = [NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType]
do {
    let attributedString = try NSAttributedString(data: encodedData, options: attributedOptions, documentAttributes: nil)
    label.attributedText = attributedString

} catch _ {
    print("Cannot create attributed String")
}

2
मुझे यह त्रुटि संदेश मिला: टाइप की एक तर्क सूची के साथ 'NSAttributedString' टाइप करने के लिए इनिशियलाइज़र को आमंत्रित नहीं कर सकता है (डेटा: NSData, विकल्प: [स्ट्रिंग: स्ट्रिंग], डॉक्यूमेंटAttributes: _, error: _) '
Qian Chen

2
स्विफ्ट 2 में परिवर्तन हैं। कृपया मेरे अपडेट किए गए उत्तर की जांच करें।
राकेशबस

10

यहाँ स्विफ्ट 5 के लिए एक समाधान

let label = UILabel()
let text = NSMutableAttributedString()
text.append(NSAttributedString(string: "stack", attributes: [NSAttributedString.Key.foregroundColor: UIColor.white]));
text.append(NSAttributedString(string: "overflow", attributes: [NSAttributedString.Key.foregroundColor: UIColor.gray]))
label.attributedText = text

यहाँ छवि विवरण दर्ज करें


7

स्विफ्ट 2 में विस्तार करने के लिए प्रयुक्त राकेश का उत्तर:

// StringExtension.swift
import UIKit
import Foundation

extension String {

    var attributedStringFromHtml: NSAttributedString? {
        do {
            return try NSAttributedString(data: self.dataUsingEncoding(NSUTF8StringEncoding)!, options: [NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType], documentAttributes: nil)
        } catch _ {
            print("Cannot create attributed String")
        }
        return nil
    }
}

उपयोग:

let htmlString = "<font color=\"red\">This is  </font> <font color=\"blue\"> some text!</font>"
label.attributedText = htmlString.attributedStringFromHtml

या वन-लाइनर्स के लिए भी

label.attributedText = "<font color=\"red\">This is  </font> <font color=\"blue\"> some text!</font>".attributedStringFromHtml

विस्तार के बारे में अच्छी बात यह है कि आपके पूरे आवेदन में .attributedStringFromHtmlसभी के लिए विशेषता होगी String


6

स्विफ्ट 5 के लिए अद्यतन

func setDiffColor(color: UIColor, range: NSRange) {
     let attText = NSMutableAttributedString(string: self.text!)
     attText.addAttribute(NSAttributedString.Key.foregroundColor, value: color, range: range)
     attributedText = attText
}

स्विफ्ट 3

मेरे कोड में, मैं एक एक्सटेंशन बनाता हूं

import UIKit
import Foundation

extension UILabel {
    func setDifferentColor(string: String, location: Int, length: Int){

        let attText = NSMutableAttributedString(string: string)
        attText.addAttribute(NSForegroundColorAttributeName, value: UIColor.blueApp, range: NSRange(location:location,length:length))
        attributedText = attText

    }
}

और यह उपयोग के लिए

override func viewDidLoad() {
        super.viewDidLoad()

        titleLabel.setDifferentColor(string: titleLabel.text!, location: 5, length: 4)

    }

6

मुझे यह पसंद आया

let yourAttributes = [NSAttributedString.Key.foregroundColor: UIColor.black, NSAttributedString.Key.font: UIFont.systemFont(ofSize: 15)]
    let yourOtherAttributes = [NSAttributedString.Key.foregroundColor: UIColor.red, NSAttributedString.Key.font: UIFont.systemFont(ofSize: 25)]

    let partOne = NSMutableAttributedString(string: "This is an example ", attributes: yourAttributes)
    let partTwo = NSMutableAttributedString(string: "for the combination of Attributed String!", attributes: yourOtherAttributes)

    let combination = NSMutableAttributedString()

    combination.append(partOne)
    combination.append(partTwo) 

इस सरल के लिए धन्यवाद।
निखिल मानपुरे


5

स्विफ्ट 3.0

let myMutableString = NSMutableAttributedString(
                            string: "your desired text",
                            attributes: [:])

myMutableString.addAttribute(
                            NSForegroundColorAttributeName,
                            value: UIColor.blue,
                            range: NSRange(
                                location:6,
                                length:7))

परिणाम:

अधिक रंगों के लिए आप केवल उत्परिवर्तनीय स्ट्रिंग में विशेषताएँ जोड़कर रख सकते हैं। अधिक उदाहरण यहाँ


1

स्विफ्ट 4 यूआईबेल एक्सटेंशन

मेरे मामले में, मुझे अक्सर लेबल के भीतर विभिन्न रंगों / फोंटों को सेट करने में सक्षम होने की आवश्यकता होती है इसलिए मैंने क्रुनाल के NSMutableAttributedString एक्सटेंशन का उपयोग करके एक UILabel एक्सटेंशन बनाया ।

func highlightWords(phrases: [String], withColor: UIColor?, withFont: UIFont?) {

    let attributedString: NSMutableAttributedString = NSMutableAttributedString(string: self.text!)

    for phrase in phrases {

        if withColor != nil {
            attributedString.setColorForText(textForAttribute: phrase, withColor: withColor!)
        }
        if withFont != nil {
            attributedString.setFontForText(textForAttribute: phrase, withFont: withFont!)
        }

    }

    self.attributedText = attributedString

}

इसका उपयोग इस तरह किया जा सकता है:

yourLabel.highlightWords(phrases: ["hello"], withColor: UIColor.blue, withFont: nil)
yourLabel.highlightWords(phrases: ["how are you"], withColor: UIColor.green, withFont: nil)


0

HTML संस्करण का उपयोग करके स्विफ्ट 3 उदाहरण।

let encodedData = htmlString.data(using: String.Encoding.utf8)!
            let attributedOptions = [NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType]
            do {
                let attributedString = try NSAttributedString(data: encodedData, options: attributedOptions, documentAttributes: nil)
                label.attributedText = attributedString
            } catch _ {
                print("Cannot create attributed String")
            }

0

यहाँ वह कोड है जो Mar 2017 पर स्विफ्ट के नवीनतम संस्करण का समर्थन करता है ।

स्विफ्ट 3.0

यहाँ मैंने एक हेल्पर क्लास और तरीका बनाया है

public class Helper {

static func GetAttributedText(inputText:String, location:Int,length:Int) -> NSMutableAttributedString {
        let attributedText = NSMutableAttributedString(string: inputText, attributes: [NSFontAttributeName:UIFont(name: "Merriweather", size: 15.0)!])
        attributedText.addAttribute(NSForegroundColorAttributeName, value: UIColor(red: 0.401107, green: 0.352791, blue: 0.503067, alpha: 1.0) , range: NSRange(location:location,length:length))
       return attributedText
    }
}

मेथड पैरामीटर्स में, इनपुट टेक्स्ट: स्ट्रिंग - आपके टेक्स्ट को लेबल लोकेशन में प्रदर्शित किया जाना है: इंट - जहां स्टाइल को एप्लीकेशन होना चाहिए, स्ट्रिंग की शुरुआत के रूप में "0" या स्ट्रिंग की लंबाई के चरित्र की स्थिति के रूप में कुछ मान्य मूल्य: इंट - से यह शैली कितने वर्णों तक लागू है।

अन्य विधि में खपत:

self.dateLabel?.attributedText = Helper.GetAttributedText(inputText: "Date : " + (self.myModel?.eventDate)!, location:0, length: 6)

आउटपुट:

यहाँ छवि विवरण दर्ज करें

नोट: यूआई रंग को परिभाषित रंग के रूप में UIColor.redया उपयोगकर्ता के रूप में परिभाषित किया जा सकता हैUIColor(red: 0.401107, green: 0.352791, blue: 0.503067, alpha: 1.0)


0
func MultiStringColor(first:String,second:String) -> NSAttributedString
    {
        let MyString1 = [NSFontAttributeName : FontSet.MonsRegular(size: 14), NSForegroundColorAttributeName : FoodConstant.PUREBLACK]

        let MyString2 = [NSFontAttributeName : FontSet.MonsRegular(size: 14), NSForegroundColorAttributeName : FoodConstant.GREENCOLOR]

        let attributedString1 = NSMutableAttributedString(string:first, attributes:MyString1)

        let attributedString2 = NSMutableAttributedString(string:second, attributes:MyString2)

        MyString1.append(MyString2)

        return MyString1
    }

0

इस NSForegroundColorAttributeName को तेज निचले संस्करण में उपयोग करने के लिए आप अनसुलझे पहचानकर्ता मुद्दों को ऊपर NSAttributedStringKey.foregroundColor में बदल सकते हैं ।

             swift lower version                swift latest version

यानी, NSForegroundColorAttributeName == NSAttributedStringKey.foregroundColor


0

स्विफ्ट 4.2

    let paragraphStyle = NSMutableParagraphStyle()
    paragraphStyle.alignment = NSTextAlignment.center

    var stringAlert = self.phoneNumber + "로\r로전송인증번호를입력해주세요"
    let attributedString: NSMutableAttributedString = NSMutableAttributedString(string: stringAlert, attributes: [NSAttributedString.Key.paragraphStyle:paragraphStyle,  .font: UIFont(name: "NotoSansCJKkr-Regular", size: 14.0)])
    attributedString.setColorForText(textForAttribute: self.phoneNumber, withColor: UIColor.init(red: 1.0/255.0, green: 205/255.0, blue: 166/255.0, alpha: 1) )
    attributedString.setColorForText(textForAttribute: "로\r로전송인증번호를입력해주세요", withColor: UIColor.black)

    self.txtLabelText.attributedText = attributedString

परिणाम

परिणाम


0

यदि आप इसे अपने आवेदन में कई बार उपयोग करना चाहते हैं तो आप केवल यूआईबेल का विस्तार बना सकते हैं और यह अधिक सरल बना देगा: -

स्विफ्ट 5

extension UILabel {
    func setSpannedColor (fullText : String , changeText : String ) {
        let strNumber: NSString = fullText as NSString
        let range = (strNumber).range(of: changeText)
        let attribute = NSMutableAttributedString.init(string: fullText)
        attribute.addAttribute(NSAttributedString.Key.foregroundColor, value: UIColor.red , range: range)
        self.attributedText = attribute
    }
}

अपने लेबल का उपयोग करें: -

yourLabel = "Hello Test"
yourLabel.setSpannedColor(fullText: totalLabel.text!, changeText: "Test")
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.