দুটি ভিন্ন রঙের টেক্সট সহ ইউিলাবল


109

আমি এর মতো একটি স্ট্রিং প্রদর্শন করতে চাই UILabel:

5 টি ফলাফল আছে।

যেখানে 5 নম্বরটি লাল বর্ণের এবং বাকী স্ট্রিং কালো।

আমি কোডে এটি কীভাবে করতে পারি?


6
@EmptyStack এটি অবশ্যই হয় না থেকে iOS 4 সমর্থন NSAttributedString কেস। আমার উত্তর নীচে দেখুন।
মাইক Pringle

উত্তর:


223

এটি করার উপায়টি এটির NSAttributedStringমতো ব্যবহার করা :

NSMutableAttributedString *text = 
 [[NSMutableAttributedString alloc] 
   initWithAttributedString: label.attributedText];

[text addAttribute:NSForegroundColorAttributeName 
             value:[UIColor redColor] 
             range:NSMakeRange(10, 1)];
[label setAttributedText: text];

এটি করার জন্য আমি একটি UILabel এক্সটেনশন তৈরি করেছি


আমি কি এটিতে লক্ষ্যগুলি যুক্ত করতে পারি? থ্যাঙ্কস
ইউজারডেভ

আমি সবেমাত্র আমার প্রজেক্টে আপনার এক্সটেনশন যুক্ত করেছি! ধন্যবাদ!
জেব

ইউআইএলবেলের জন্য দুর্দান্ত বিভাগ। অনেক ধন্যবাদ. এটি গ্রহণযোগ্য উত্তর হওয়া উচিত।
প্রদীপ রেড্ডি কাইপা

63

আমি একটি তৈরি করে এই কাজ করেছেন categoryজন্যNSMutableAttributedString

-(void)setColorForText:(NSString*) textToFind withColor:(UIColor*) color
{
    NSRange range = [self.mutableString rangeOfString:textToFind options:NSCaseInsensitiveSearch];

    if (range.location != NSNotFound) {
        [self addAttribute:NSForegroundColorAttributeName value:color range:range];
    }
}

এটি ব্যবহার করুন

- (void) setColoredLabel
{
    NSMutableAttributedString *string = [[NSMutableAttributedString alloc] initWithString:@"Here is a red blue and green text"];
    [string setColorForText:@"red" withColor:[UIColor redColor]];
    [string setColorForText:@"blue" withColor:[UIColor blueColor]];
    [string setColorForText:@"green" withColor:[UIColor greenColor]];
    mylabel.attributedText = string;
}

সুইফট 3

extension NSMutableAttributedString{
    func setColorForText(_ textToFind: String, with color: UIColor) {
        let range = self.mutableString.range(of: textToFind, options: .caseInsensitive)
        if range.location != NSNotFound {
            addAttribute(NSForegroundColorAttributeName, value: color, range: range)
        }
    }
}

, USAGE

func setColoredLabel() {
    let string = NSMutableAttributedString(string: "Here is a red blue and green text")
    string.setColorForText("red", with: #colorLiteral(red: 0.9254902005, green: 0.2352941185, blue: 0.1019607857, alpha: 1))
    string.setColorForText("blue", with: #colorLiteral(red: 0.2392156869, green: 0.6745098233, blue: 0.9686274529, alpha: 1))
    string.setColorForText("green", with: #colorLiteral(red: 0.3411764801, green: 0.6235294342, blue: 0.1686274558, alpha: 1))
    mylabel.attributedText = string
}

সুইফট 4 @ কেজে 13 জানার জন্য ধন্যবাদ

// If no text is send, then the style will be applied to full text
func setColorForText(_ textToFind: String?, with color: UIColor) {

    let range:NSRange?
    if let text = textToFind{
        range = self.mutableString.range(of: text, options: .caseInsensitive)
    }else{
        range = NSMakeRange(0, self.length)
    }
    if range!.location != NSNotFound {
        addAttribute(NSAttributedStringKey.foregroundColor, value: color, range: range!)
    }
}

আমি গুণাবলী নিয়ে আরও পরীক্ষা-নিরীক্ষা করেছি এবং এর ফলাফলগুলি নীচে, এখানে উত্সকোড

ফলাফল এখানে

শৈলী


2
পদ্ধতির সাহায্যে আপনার এনএসমিটেবলঅ্যাট্রিবিউটেড স্ট্রিংয়ের জন্য একটি নতুন বিভাগ তৈরি করা দরকার ... যাইহোক আমি এই নমুনাটি গিথুবে যুক্ত করেছি, আপনি এটি ধরতে এবং এটিতে
anoop4real

তবে আমাকে স্ট্রিংটিতে সংবেদনশীল সহ সমস্ত বর্ণমালার রঙ নির্ধারণ করতে হবে .... পুরো স্ট্রিংয়ের লাল রঙের মতো সমস্ত "ই"
রবি ওঝা

'এনএসমিটেবল অ্যাট্রিবিউটেড স্ট্রিং'-এর জন্য কোনও নির্বাচিত @ ইন্টারফেসে নির্বাচককে' সেট কালারফর্ট টেক্সট: উইন্ডার কালার: '
এপ্রকাশ

1
আমি ত্রুটি পেয়েছি 'সমাধান না করা শনাক্তকারী' এনএসফোরগ্রাউন্ড কালারঅ্যাট্রিবিউটনেম 'এর ব্যবহার সুইফট ৪.১-এর সাথে, তবে আমি' এনএসফোরগ্রাউন্ডকালারঅ্যাট্রিবিউটনেম 'কে' এনএসএট্রিবিউডস্ট্রিংকি.ফরগ্রাউন্ড কালার 'এ প্রতিস্থাপন করেছি এবং সঠিকভাবে বিল্ডিং করেছি।
kj13

1
@ kj13 জানার জন্য ধন্যবাদ, আমি উত্তরটি আপডেট করেছি এবং আরও কয়েকটি স্টাইল যুক্ত করেছি
anoop4real

25

আপনি এখানে যান

NSMutableAttributedString * string = [[NSMutableAttributedString alloc] initWithString:lblTemp.text];
[string addAttribute:NSForegroundColorAttributeName value:[UIColor redColor] range:NSMakeRange(0,5)];
[string addAttribute:NSForegroundColorAttributeName value:[UIColor greenColor] range:NSMakeRange(5,6)];
[string addAttribute:NSForegroundColorAttributeName value:[UIColor blueColor] range:NSMakeRange(11,5)];
lblTemp.attributedText = string;

20

সুইফট 4

// An attributed string extension to achieve colors on text.
extension NSMutableAttributedString {

    func setColor(color: UIColor, forText stringValue: String) {
       let range: NSRange = self.mutableString.range(of: stringValue, options: .caseInsensitive)
       self.addAttribute(NSAttributedStringKey.foregroundColor, value: color, range: range)
    }

}

// Try it with label
let label = UILabel()
label.frame = CGRect(x: 70, y: 100, width: 260, height: 30)
let stringValue = "There are 5 results."
let attributedString: NSMutableAttributedString = NSMutableAttributedString(string: stringValue)
attributedString.setColor(color: UIColor.red, forText: "5")
label.font = UIFont.systemFont(ofSize: 26)
label.attributedText = attributedString
self.view.addSubview(label)

ফলাফল

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


সুইফট 3

func setColoredLabel() {
        var string: NSMutableAttributedString = NSMutableAttributedString(string: "redgreenblue")
        string.setColor(color: UIColor.redColor(), forText: "red")
        string.setColor(color: UIColor.greenColor(), forText: "green")
        string.setColor(color: UIColor.blueColor(, forText: "blue")
        mylabel.attributedText = string
    }


func setColor(color: UIColor, forText stringValue: String) {
        var range: NSRange = self.mutableString.rangeOfString(stringValue, options: NSCaseInsensitiveSearch)
        if range != nil {
            self.addAttribute(NSForegroundColorAttributeName, value: color, range: range)
        }
    }

ফলাফল:

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


12
//NSString *myString = @"I have to replace text 'Dr Andrew Murphy, John Smith' ";
NSString *myString = @"Not a member?signin";

//Create mutable string from original one
NSMutableAttributedString *attString = [[NSMutableAttributedString alloc] initWithString:myString];

//Fing range of the string you want to change colour
//If you need to change colour in more that one place just repeat it
NSRange range = [myString rangeOfString:@"signin"];
[attString addAttribute:NSForegroundColorAttributeName value:[UIColor colorWithRed:(63/255.0) green:(163/255.0) blue:(158/255.0) alpha:1.0] range:range];

//Add it to the label - notice its not text property but it's attributeText
_label.attributedText = attString;

6

যেহেতু আইওএস 6 , UIKit সমর্থন করে আরোপিত স্ট্রিং অঙ্কন তাই কোনও এক্সটেনশন বা প্রতিস্থাপন প্রয়োজন হয়।

থেকে UILabel:

@property(nonatomic, copy) NSAttributedString *attributedText;

আপনার কেবল নিজের তৈরি করা দরকার NSAttributedString। মূলত দুটি উপায় রয়েছে:

  1. একই বৈশিষ্ট্যযুক্ত পাঠ্যের অংশগুলি যুক্ত করুন - প্রতিটি অংশের জন্য একটি NSAttributedStringউদাহরণ তৈরি করুন এবং সেগুলিতে একটিতে যুক্ত করুনNSMutableAttributedString

  2. সরল স্ট্রিং থেকে বিশিষ্ট পাঠ্য তৈরি করুন এবং তারপরে প্রদত্ত রেঞ্জগুলির জন্য বিশিষ্ট যুক্ত করুন - আপনার সংখ্যার (বা যাই হোক না কেন) সীমাটি সন্ধান করুন এবং এতে বর্ণের বিভিন্ন বৈশিষ্ট্য প্রয়োগ করুন।


6

অনুপস দ্রুত উত্তর। যে কোনও ক্লাস থেকে পুনরায় ব্যবহার করা যেতে পারে।

দ্রুত ফাইলের মধ্যে

extension NSMutableAttributedString {

    func setColorForStr(textToFind: String, color: UIColor) {

        let range = self.mutableString.rangeOfString(textToFind, options:NSStringCompareOptions.CaseInsensitiveSearch);
        if range.location != NSNotFound {
            self.addAttribute(NSForegroundColorAttributeName, value: color, range: range);
        }

    }
}

কিছু দৃশ্যে নিয়ন্ত্রক

let attributedString: NSMutableAttributedString = NSMutableAttributedString(string: self.labelShopInYourNetwork.text!);
attributedString.setColorForStr("YOUR NETWORK", color: UIColor(red: 0.039, green: 0.020, blue: 0.490, alpha: 1.0));
self.labelShopInYourNetwork.attributedText = attributedString;

4

এই পরিস্থিতিতে ইউআইবিবেল ভিউ বা একাধিক ইউআইএলবেল থাকা ওভারকিল হিসাবে বিবেচিত হতে পারে।

আমার পরামর্শটি টিটিটিএটিগ্রিবিউটেবল লেবেল ব্যবহার করা হবে যা ইউআইএলবেলের জন্য একটি ড্রপ-ইন প্রতিস্থাপন যা এনএসএট্রিবিউটড স্ট্রিং সমর্থন করে । এর অর্থ আপনি খুব সহজেই স্ট্রিংয়ের বিভিন্ন পরিসরে বিভিন্ন স্টাইল প্রয়োগ করতে পারেন।


4

সংক্ষিপ্ত, ফর্ম্যাটযুক্ত পাঠ্য প্রদর্শন করার জন্য যা সম্পাদনাযোগ্য হতে হবে না, কোর পাঠ্য পথটি । লেবেলগুলির জন্য বেশ কয়েকটি ওপেন-সোর্স প্রকল্প রয়েছে যা ব্যবহারের জন্য NSAttributedStringএবং রেন্ডারিংয়ের জন্য মূল পাঠ্য রয়েছে। উদাহরণস্বরূপ কোরটেক্সটআট্রিবিউটেড লেবেল বা ওএএচটিগ্রিবিউটেড লেবেল দেখুন ।



3

জেটিএ টিট্রিবিউটেড লেবেল ( মাইস্টক্লোর দ্বারা) আপনাকে আইওএস 6 এর অধীনে ইউআইএলবেলে এবং তার সাথে জেটিটিআউটবিউটেবল লেবেল শ্রেণিকে আইওএস 5 এর অধীনে ইউটিআইবিবেলে গুণিত স্ট্রিং সমর্থনটি ব্যবহার করতে দেয়।


2

একটি সুইফট 3.0 সমাধান রয়েছে

extension UILabel{


    func setSubTextColor(pSubString : String, pColor : UIColor){
        let attributedString: NSMutableAttributedString = NSMutableAttributedString(string: self.text!);
        let range = attributedString.mutableString.range(of: pSubString, options:NSString.CompareOptions.caseInsensitive)
        if range.location != NSNotFound {
            attributedString.addAttribute(NSForegroundColorAttributeName, value: pColor, range: range);
        }
        self.attributedText = attributedString

    }
}

এবং কল একটি উদাহরণ আছে:

let colorString = " (string in red)"
self.mLabel.text = "classic color" + colorString
self.mLabel.setSubTextColor(pSubString: colorString, pColor: UIColor.red)

হাই, আমি যদি দুটি ভিন্ন কালারস্ট্রিং যুক্ত করতে চাই তবে আমি কীভাবে এটি করব? আমি আপনার উদাহরণটি ব্যবহার করার চেষ্টা করেছি এবং অন্য একটি যুক্ত করেছি, তবে এটি এখনও তাদের মধ্যে একটির রঙিন করে
তোলে

এটি চেষ্টা করুন: রঙ স্ট্রিং = "(লাল রঙের স্ট্রিং)" রঙ স্ট্রিংগ্রিন = "(সবুজ রঙের স্ট্রিং)" স্ব.এমএলবেল.টেক্সট = "ক্লাসিক রঙ" + রঙ স্ট্রিং + রঙ স্ট্রিংগ্রিন স্ব.এমএলবেল.সেটসটব টেক্সটকলার (পিএসবস্ট্রিং: রঙ স্ট্রিং, প্লেয়ার: ইউআইকোলার) .red) self.mLabel.setSubTextColor (pSubString: colorStringGreen, pColor: UIColor.green)
কেভিন ABRIOUX

এই অদ্ভুত, এটা এখনও উভয় পরিবর্তন করে না: s24.postimg.org/ds0rpyyut/...
এরিক অরুনুনে

একটি সমস্যা হ'ল যদি দুটি স্ট্রিং একই হয় তবে এটি কেবল তার মধ্যে একটির রঙ করে, এখানে দেখুন: পেস্টবিন . com / এফজেজেজেটিটিপি 3 । আপনার পাশাপাশি এই কি ঠিক আছে?
এরিক অরুনুনে

2

সুইফট 4 এবং তারপরের : আনুপ 4real সমাধান দ্বারা অনুপ্রাণিত , এখানে একটি স্ট্রিং এক্সটেনশান যা 2 টি ভিন্ন বর্ণের সাথে পাঠ্য উত্পন্ন করতে ব্যবহার করা যেতে পারে।

extension String {

    func attributedStringForPartiallyColoredText(_ textToFind: String, with color: UIColor) -> NSMutableAttributedString {
        let mutableAttributedstring = NSMutableAttributedString(string: self)
        let range = mutableAttributedstring.mutableString.range(of: textToFind, options: .caseInsensitive)
        if range.location != NSNotFound {
            mutableAttributedstring.addAttribute(NSAttributedStringKey.foregroundColor, value: color, range: range)
        }
        return mutableAttributedstring
    }
}

নীচের উদাহরণটি বাকী লেখার জন্য মূল লেবেলের রঙ ধরে রাখার সময় নক্ষত্রের রঙকে লালচে পরিবর্তন করে।

label.attributedText = "Enter username *".attributedStringForPartiallyColoredText("*", with: #colorLiteral(red: 1, green: 0, blue: 0, alpha: 1))

2

আমার জবাবটিতে একটি পাঠ্যের সমস্ত ঘটনা কেবল রঙিন করার বিকল্প রয়েছে: "ওয়া বা ওয়া বা দুবদব", আপনি কেবলমাত্র গৃহীত উত্তরের মতো প্রথম ঘটনাটিই রঙ করতে পারবেন না।

extension NSMutableAttributedString{
    func setColorForText(_ textToFind: String, with color: UIColor) {
        let range = self.mutableString.range(of: textToFind, options: .caseInsensitive)
        if range.location != NSNotFound {
            addAttribute(NSForegroundColorAttributeName, value: color, range: range)
        }
    }

    func setColorForAllOccuranceOfText(_ textToFind: String, with color: UIColor) {
        let inputLength = self.string.count
        let searchLength = textToFind.count
        var range = NSRange(location: 0, length: self.length)

        while (range.location != NSNotFound) {
            range = (self.string as NSString).range(of: textToFind, options: [], range: range)
            if (range.location != NSNotFound) {
                self.addAttribute(NSForegroundColorAttributeName, value: color, range: NSRange(location: range.location, length: searchLength))
                range = NSRange(location: range.location + range.length, length: inputLength - (range.location + range.length))
            }
        }
    }
}

এখন আপনি এটি করতে পারেন:

let message = NSMutableAttributedString(string: "wa ba wa ba dubdub")
message.setColorForText(subtitle, with: UIColor.red) 
// or the below one if you want all the occurrence to be colored 
message.setColorForAllOccuranceOfText("wa", with: UIColor.red) 
// then you set this attributed string to your label :
lblMessage.attributedText = message

এবং আমি কীভাবে এটি ব্যবহার করতে পারি?
pableiros

1
আমার উত্তর আপডেট করেছে, একটি সুন্দর দিন দিন :)
আলশ সংকলক 14'19

1

জন্য Xamarin ব্যবহারকারীদের আমি একটি স্ট্যাটিক আছে C # এর পদ্ধতি যেখানে আমি স্ট্রিং একটি অ্যারের মধ্যে পাস, UIColours এবং UIFonts এর অ্যারের একটি অ্যারের (তারা দৈর্ঘ্যে মেলা দরকার হবে)। এরপরে বিশিষ্ট স্ট্রিংটি আবার পাস করা হয়।

দেখা:

public static NSMutableAttributedString GetFormattedText(string[] texts, UIColor[] colors, UIFont[] fonts)
    {

        NSMutableAttributedString attrString = new NSMutableAttributedString(string.Join("", texts));
        int position = 0;

        for (int i = 0; i < texts.Length; i++)
        {
            attrString.AddAttribute(new NSString("NSForegroundColorAttributeName"), colors[i], new NSRange(position, texts[i].Length));

            var fontAttribute = new UIStringAttributes
            {
                Font = fonts[i]
            };

            attrString.AddAttributes(fontAttribute, new NSRange(position, texts[i].Length));

            position += texts[i].Length;
        }

        return attrString;

    }

1

আমার ক্ষেত্রে আমি এক্সকোড 10.1 ব্যবহার করছি। ইন্টারফেস বিল্ডারে লেবেল পাঠ্যে সমতল পাঠ্য এবং বৈশিষ্ট্যযুক্ত পাঠ্যের মধ্যে স্যুইচ করার বিকল্প রয়েছে

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

আশা করি এটি অন্য কাউকে সাহায্য করতে পারে ..!


2
দেখে মনে হচ্ছে এক্সকোড 11.0 অ্যাট্রিবিউটড টেক্সট এডিটরটি ভেঙেছে। সুতরাং, আমি টেক্সটএডিট ব্যবহার করে পাঠ্যটি তৈরি করতে চেষ্টা করে তারপর এটি Xcode এ আটকালাম এবং এটি আশ্চর্যজনকভাবে ভাল কাজ করেছে।
ব্রেইনওয়্যার

0
extension UILabel{

    func setSubTextColor(pSubString : String, pColor : UIColor){


        let attributedString: NSMutableAttributedString = self.attributedText != nil ? NSMutableAttributedString(attributedString: self.attributedText!) : NSMutableAttributedString(string: self.text!);


        let range = attributedString.mutableString.range(of: pSubString, options:NSString.CompareOptions.caseInsensitive)
        if range.location != NSNotFound {
            attributedString.addAttribute(NSForegroundColorAttributeName, value: pColor, range: range);
        }
        self.attributedText = attributedString

    }
}

0

আমার নিজস্ব সমাধানটি পরবর্তী পদ্ধতির মতো একটি পদ্ধতি তৈরি করা হয়েছিল:

-(void)setColorForText:(NSString*) textToFind originalText:(NSString *)originalString withColor:(UIColor*)color andLabel:(UILabel *)label{

NSMutableAttributedString *attString = [[NSMutableAttributedString alloc] initWithString:originalString];
NSRange range = [originalString rangeOfString:textToFind];

[attString addAttribute:NSForegroundColorAttributeName value:color range:range];

label.attributedText = attString;

if (range.location != NSNotFound) {
    [attString addAttribute:NSForegroundColorAttributeName value:color range:range];
}
label.attributedText = attString; }

এটি একই লেখায় কেবল একটি ভিন্ন রঙের সাথে কাজ করেছে তবে আপনি একই বাক্যে আরও রঙে সহজেই তা খাপ খাইয়ে নিতে পারেন।


0

নীচের কোড ব্যবহার করে আপনি শব্দের উপর ভিত্তি করে একাধিক রং সেট করতে পারেন।

NSMutableArray * array = [[NSMutableArray alloc] initWithObjects:@"1 ball",@"2 ball",@"3 ball",@"4 ball", nil];    
NSMutableAttributedString *attStr = [[NSMutableAttributedString alloc] init];
for (NSString * str in array)
 {
    NSMutableAttributedString * textstr = [[NSMutableAttributedString alloc] initWithString:[NSString stringWithFormat:@"%@ ,",str] attributes:@{NSForegroundColorAttributeName :[self getRandomColor]}];
     [attStr appendAttributedString:textstr];
  }
UILabel *lab = [[UILabel alloc] initWithFrame:CGRectMake(10, 300, 300, 30)];
lab.attributedText = attStr;
[self.view addSubview:lab];

-(UIColor *) getRandomColor
{
   CGFloat redcolor = arc4random() % 255 / 255.0;
   CGFloat greencolor = arc4random() % 255 / 255.0;
   CGFloat bluencolor = arc4random() % 255 / 255.0;
   return  [UIColor colorWithRed:redcolor green:greencolor blue:bluencolor alpha:1.0];
}

0

SwiftRichStringনিখুঁত কাজ করে! আপনি +দুটি বৈশিষ্ট্যযুক্ত স্ট্রিং সংযুক্ত করতে ব্যবহার করতে পারেন

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