একক লেবেলে একাধিক ফন্টের রঙ ব্যবহার করুন


88

আইওএস-এ কোনও একক লেবেলে দুটি, এমনকি তিনটি ফন্টের রঙ ব্যবহার করার কোনও উপায় আছে কি?

"হ্যালো, আপনি কেমন আছেন" পাঠ্যটি উদাহরণ হিসাবে ব্যবহার করা হলে, "হ্যালো" নীল হবে, এবং "আপনি কেমন আছেন" সবুজ হবে?

এটি কি সম্ভব, একাধিক লেবেল তৈরি করার চেয়ে সহজ বলে মনে হচ্ছে?


UILabel এর বিশিষ্ট পাঠ্য সম্পত্তি ব্যবহার করার চেষ্টা করুন। stackoverflow.com/questions/3586871/...
rakeshbs

আপনি স্ট্রিংয়ে রঙের পরিসীমা যুক্ত করতে চান
কিরীট মোদী

উত্তর:


150

এখান থেকে রেফারেন্স।

তোমাদের সবাইকে আরম্ভ প্রথম 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()
}

আউটপুট

এখানে চিত্র বর্ণনা লিখুন

একাধিক রঙ

স্ট্রিংয়ে একাধিক রঙ পেতে আপনার ভিউডিডলডে নীচের লাইন কোডটি যুক্ত করুন।

 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))

4
আপনি দুটি পরিসরের বৈশিষ্ট্য যুক্ত করতে পারেন, যদি না হয় তবে আমি কীভাবে এটির কাছাকাছি যাব?
জাস্টিন রোজ

60

@ হেমস মোড়াদিয়াদের জন্য

এখানে চিত্র বর্ণনা লিখুন

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

39

সুইফট 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)

ফলাফল:

এখানে চিত্র বর্ণনা লিখুন


@ ক্রুনাল কীভাবে রঙ পরিবর্তন করতে একাধিক স্ট্রিং সমর্থন করার জন্য এটি পরিবর্তন করা যেতে পারে ...? আমার নীচে একটি দীর্ঘ স্ট্রিং রয়েছে যার নীচে শিরোনাম রয়েছে ------------, তবে উপরের কোডটি ভাল কাজ করে তবে এটি কেবল প্রথম পাওয়া একটি রঙ করে। এটি কি নির্দিষ্ট রঙে স্ট্রিং --------- করার জন্য সংশোধন করা যায় ....? ধন্যবাদ
ওমিড CompSCI

এটি এর মতো পাঠ্যের জন্য আর কাজ করবে না: "ফ্লোস্ট্যাকওভারফ্লো" এটি কেবল প্রথম প্রবাহকে বদলে দেবে, তবে আমাদের শেষের দরকার, কীভাবে এটি অর্জন করা যায়?
swift2geek

19

সুইফট 4-এর আপডেট হওয়া উত্তর

আপনি সহজেই বিভিন্ন টেক্সট ফর্ম্যাটিং করতে ইউআইএলবেলের বৈশিষ্ট্যযুক্ত প্রবন্ধের অভ্যন্তরে সহজেই এইচটিএমএল ব্যবহার করতে পারেন।

 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")
}

4
আমি এই ত্রুটি বার্তাটি পেয়েছি: টাইপের আর্গুমেন্টের তালিকা দিয়ে 'এনএসএট্রিবিউটড স্ট্রিং' টাইপের জন্য আরম্ভকারীকে ডাকতে পারি না (ডেটা: এনএসডিটা, বিকল্পগুলি: [স্ট্রিং: স্ট্রিং], ডকুমেন্টঅ্যাট্রিবিউটস: _, ত্রুটি: _) '
কিয়ান চেন

4
সুইফট 2-এ পরিবর্তন রয়েছে Please দয়া করে আমার আপডেট হওয়া উত্তরটি পরীক্ষা করুন।
রাকেশবস

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 ইউআইএলবেল এক্সটেনশন

আমার ক্ষেত্রে, আমি লেবেল প্রায়শই তাই আমি ব্যবহার করে একটি UILabel এক্সটেনশন তৈরি মধ্যে বিভিন্ন রং / ফন্ট সেট করতে পারবে করা প্রয়োজন Krunal এর NSMutableAttributedString এক্সটেনশান।

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

এইচটিএমএল সংস্করণ ব্যবহার করে সুইফট 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

এখানে এমন কোড রয়েছে যা মার্চ 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
    }
}

পদ্ধতি প্যারামিটারগুলিতে ইনপুট টেক্সট: স্ট্রিং - আপনার পাঠ্যটি লেবেলের স্থানে প্রদর্শিত হতে হবে: Int - যেখানে শৈলীর প্রয়োগ হওয়া উচিত, স্ট্রিংয়ের শুরু হিসাবে "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

এই এনএসফোরগ্রাউন্ড কালারঅ্যাট্রিবিউটনামটি সুইফ্ট লোয়ার সংস্করণে ব্যবহার করার জন্য আপনি অমীমাংসিত শনাক্তকারী সমস্যাগুলি উপরেরটিকে এনএসএট্রিবিউটড স্ট্রিংকি / ডিফল্টগ্রাউন্ড কালারে পরিবর্তন করতে পারেন

             swift lower version                swift latest version

উদাহরণস্বরূপ, এনএসফোরগ্রাউন্ড কালারঅ্যাট্রিবিউটনেম == এনএসএট্রিবিউটেড স্ট্রিংকি


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")
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.