একটি একক ইউলাইবেলে বোল্ড এবং অ-সাহসী পাঠ্য?


254

কোনও uiLabel এ সাহসী এবং অ-সাহসী উভয় পাঠকে কীভাবে অন্তর্ভুক্ত করা সম্ভব হবে?

আমি বরং ইউআইবিউব ভিউ ব্যবহার না করবো .. আমি এনএসএটিগ্রিবিউটস্ট্রিং ব্যবহার করে এটিও সম্ভব হতে পারে তা পড়েছি তবে কীভাবে এটি ব্যবহার করতে হয় সে সম্পর্কে আমার কোনও ধারণা নেই। কোন ধারনা?

অ্যাপল তাদের বেশ কয়েকটি অ্যাপে এটি অর্জন করেছে; উদাহরণ স্ক্রিনশট:লিঙ্ক পাঠ্য

ধন্যবাদ! - ডোম


পরীক্ষা করে দেখুন এই বিষয়ে একটি পূর্ববর্তী স্ট্যাক ওভারফ্লো থেকে। (মূলত, দুটি ইউআইএলবেল তৈরি করুন এবং একে অপরের সাথে যথাযথভাবে তাদের অবস্থান নির্ধারণ করুন))
সমকাস ২

উত্তর:


360

হালনাগাদ

সুইফটে আমাদের সিনট্যাক্সের চেয়ে ছোট আইওএস 5 এর সাথে পুরানো স্টাফগুলির সাথে ডিল করতে হবে না তাই সবকিছু সত্যিই সহজ হয়ে যায়:

সুইফট 5

func attributedString(from string: String, nonBoldRange: NSRange?) -> NSAttributedString {
    let fontSize = UIFont.systemFontSize
    let attrs = [
        NSAttributedString.Key.font: UIFont.boldSystemFont(ofSize: fontSize),
        NSAttributedString.Key.foregroundColor: UIColor.black
    ]
    let nonBoldAttribute = [
        NSAttributedString.Key.font: UIFont.systemFont(ofSize: fontSize),
    ]
    let attrStr = NSMutableAttributedString(string: string, attributes: attrs)
    if let range = nonBoldRange {
        attrStr.setAttributes(nonBoldAttribute, range: range)
    }
    return attrStr
}

সুইফট 3

func attributedString(from string: String, nonBoldRange: NSRange?) -> NSAttributedString {
    let fontSize = UIFont.systemFontSize
    let attrs = [
        NSFontAttributeName: UIFont.boldSystemFont(ofSize: fontSize),
        NSForegroundColorAttributeName: UIColor.black
    ]
    let nonBoldAttribute = [
        NSFontAttributeName: UIFont.systemFont(ofSize: fontSize),
    ]
    let attrStr = NSMutableAttributedString(string: string, attributes: attrs)
    if let range = nonBoldRange {
        attrStr.setAttributes(nonBoldAttribute, range: range)
    }
    return attrStr
}

ব্যবহার:

let targetString = "Updated 2012/10/14 21:59 PM"
let range = NSMakeRange(7, 12)

let label = UILabel(frame: CGRect(x:0, y:0, width:350, height:44))
label.backgroundColor = UIColor.white
label.attributedText = attributedString(from: targetString, nonBoldRange: range)
label.sizeToFit()

বোনাস: আন্তর্জাতিকীকরণ

কিছু লোক আন্তর্জাতিকীকরণ সম্পর্কে মন্তব্য করেছিলেন। আমি ব্যক্তিগতভাবে মনে করি এটি এই প্রশ্নের আওতার বাইরে কিন্তু নির্দেশিক উদ্দেশ্যে এইভাবে আমি এটি করব

// Date we want to show
let date = Date()

// Create the string.
// I don't set the locale because the default locale of the formatter is `NSLocale.current` so it's good for internationalisation :p
let formatter = DateFormatter()
formatter.dateStyle = .medium
formatter.timeStyle = .short
let targetString = String(format: NSLocalizedString("Update %@", comment: "Updated string format"),
                          formatter.string(from: date))

// Find the range of the non-bold part
formatter.timeStyle = .none
let nonBoldRange = targetString.range(of: formatter.string(from: date))

// Convert Range<Int> into NSRange
let nonBoldNSRange: NSRange? = nonBoldRange == nil ?
    nil :
    NSMakeRange(targetString.distance(from: targetString.startIndex, to: nonBoldRange!.lowerBound),
                targetString.distance(from: nonBoldRange!.lowerBound, to: nonBoldRange!.upperBound))

// Now just build the attributed string as before :)
label.attributedText = attributedString(from: targetString,
                                        nonBoldRange: nonBoldNSRange)

ফলাফল (ধরে নিলাম ইংরাজী এবং জাপানি স্থানীয়করণযোগ্য। স্ট্রিংগুলি উপলব্ধ)

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

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


IOS6 এবং পরবর্তীগুলির পূর্ববর্তী উত্তর (উদ্দেশ্য-সি এখনও কার্যকর):

IOS6 ইন UILabel, UIButton, UITextView, UITextField, সমর্থন স্ট্রিং যার অর্থ হল আমরা তৈরি করতে প্রয়োজন হবে না আরোপিত CATextLayerআরোপিত স্ট্রিং জন্য আমাদের প্রাপক হিসাবে সে। বৈশিষ্ট্যযুক্ত স্ট্রিংটি তৈরি করার জন্য আমাদের আর কোরি টেক্সট দিয়ে খেলতে হবে না :) আমাদের ওজেক্ট-সি ফাউন্ডেশন.ফ্রেমে ওয়ার্কে NSParagraphStyleএবং অন্যান্য ধ্রুবকগুলিতে নতুন ক্লাস রয়েছে যা আমাদের জীবনকে আরও সহজ করে তুলবে। হ্যাঁ!

সুতরাং, আমাদের যদি এই স্ট্রিং থাকে:

NSString *text = @"Updated: 2012/10/14 21:59"

আমাদের কেবলমাত্র বিশিষ্ট স্ট্রিং তৈরি করতে হবে:

if ([_label respondsToSelector:@selector(setAttributedText:)])
{
    // iOS6 and above : Use NSAttributedStrings

    // Create the attributes
    const CGFloat fontSize = 13;
    NSDictionary *attrs = @{
        NSFontAttributeName:[UIFont boldSystemFontOfSize:fontSize],
        NSForegroundColorAttributeName:[UIColor whiteColor]
    };
    NSDictionary *subAttrs = @{
        NSFontAttributeName:[UIFont systemFontOfSize:fontSize]
    };

    // Range of " 2012/10/14 " is (8,12). Ideally it shouldn't be hardcoded
    // This example is about attributed strings in one label
    // not about internationalisation, so we keep it simple :)
    // For internationalisation example see above code in swift
    const NSRange range = NSMakeRange(8,12);

    // Create the attributed string (text + attributes)
    NSMutableAttributedString *attributedText =
      [[NSMutableAttributedString alloc] initWithString:text
                                             attributes:attrs];
    [attributedText setAttributes:subAttrs range:range];

    // Set it in our UILabel and we are done!
    [_label setAttributedText:attributedText];
} else {
    // iOS5 and below
    // Here we have some options too. The first one is to do something
    // less fancy and show it just as plain text without attributes.
    // The second is to use CoreText and get similar results with a bit
    // more of code. Interested people please look down the old answer.

    // Now I am just being lazy so :p
    [_label setText:text];
}

আক্রমণাত্মক কোডের লোকদের কাছ থেকে এখানে বেশ কয়েকটি ভাল প্রাথমিক ব্লগ পোস্ট রয়েছে যা আরও উদাহরণের সাথে ব্যাখ্যা করে ব্যাখ্যা করে , "আইওএস 6 এর জন্য এনএস্যাট্রিবিউটেড স্ট্রিংয়ের পরিচিতি" এবং "ইন্টারফেস বিল্ডার ব্যবহার করে আইওএসের জন্য অ্যাট্রিবিউটেড স্ট্রিংস" সন্ধান করুন :)NSAttributedString

PS: কোডের উপরে এটি কাজ করা উচিত তবে এটি মস্তিষ্ক-সংকলিত ছিল। আমি আশা করি এটি যথেষ্ট হয়েছে :)


আইওএস 5 এবং এর নীচে পুরানো উত্তর

একটি এনএসএট্রিবিউটেড স্ট্রিং সহ একটি ক্যাটাটেল লেয়ার ব্যবহার করুন ! 2 টি ইউআইএলবেলের তুলনায় অনেক হালকা এবং সহজ। (আইওএস ৩.২ এবং তার বেশি)

উদাহরণ।

কোয়ার্টজকোর ফ্রেমওয়ার্ক (CALayers এর জন্য প্রয়োজনীয়), এবং কোরটেক্সট (বিশিষ্ট স্ট্রিংয়ের জন্য প্রয়োজনীয় add) যুক্ত করতে ভুলবেন না

#import <QuartzCore/QuartzCore.h>
#import <CoreText/CoreText.h>

নীচে উদাহরণস্বরূপ নেভিগেশন নিয়ামকের টুলবারে একটি সাবলেয়ার যুক্ত হবে। আইফোনে মেল.এপ। :)

- (void)setRefreshDate:(NSDate *)aDate
{
    [aDate retain];
    [refreshDate release];
    refreshDate = aDate;

    if (refreshDate) {

        /* Create the text for the text layer*/    
        NSDateFormatter *df = [[NSDateFormatter alloc] init];
        [df setDateFormat:@"MM/dd/yyyy hh:mm"];

        NSString *dateString = [df stringFromDate:refreshDate];
        NSString *prefix = NSLocalizedString(@"Updated", nil);
        NSString *text = [NSString stringWithFormat:@"%@: %@",prefix, dateString];
        [df release];

        /* Create the text layer on demand */
        if (!_textLayer) {
            _textLayer = [[CATextLayer alloc] init];
            //_textLayer.font = [UIFont boldSystemFontOfSize:13].fontName; // not needed since `string` property will be an NSAttributedString
            _textLayer.backgroundColor = [UIColor clearColor].CGColor;
            _textLayer.wrapped = NO;
            CALayer *layer = self.navigationController.toolbar.layer; //self is a view controller contained by a navigation controller
            _textLayer.frame = CGRectMake((layer.bounds.size.width-180)/2 + 10, (layer.bounds.size.height-30)/2 + 10, 180, 30);
            _textLayer.contentsScale = [[UIScreen mainScreen] scale]; // looks nice in retina displays too :)
            _textLayer.alignmentMode = kCAAlignmentCenter;
            [layer addSublayer:_textLayer];
        }

        /* Create the attributes (for the attributed string) */
        CGFloat fontSize = 13;
        UIFont *boldFont = [UIFont boldSystemFontOfSize:fontSize];
        CTFontRef ctBoldFont = CTFontCreateWithName((CFStringRef)boldFont.fontName, boldFont.pointSize, NULL);
        UIFont *font = [UIFont systemFontOfSize:13];
        CTFontRef ctFont = CTFontCreateWithName((CFStringRef)font.fontName, font.pointSize, NULL);
        CGColorRef cgColor = [UIColor whiteColor].CGColor;
        NSDictionary *attributes = [NSDictionary dictionaryWithObjectsAndKeys:
                                    (id)ctBoldFont, (id)kCTFontAttributeName,
                                    cgColor, (id)kCTForegroundColorAttributeName, nil];
        CFRelease(ctBoldFont);
        NSDictionary *subAttributes = [NSDictionary dictionaryWithObjectsAndKeys:(id)ctFont, (id)kCTFontAttributeName, nil];
        CFRelease(ctFont);

        /* Create the attributed string (text + attributes) */
        NSMutableAttributedString *attrStr = [[NSMutableAttributedString alloc] initWithString:text attributes:attributes];
        [attrStr addAttributes:subAttributes range:NSMakeRange(prefix.length, 12)]; //12 is the length of " MM/dd/yyyy/ "

        /* Set the attributes string in the text layer :) */
        _textLayer.string = attrStr;
        [attrStr release];

        _textLayer.opacity = 1.0;
    } else {
        _textLayer.opacity = 0.0;
        _textLayer.string = nil;
    }
}

এই উদাহরণে আমি শুধুমাত্র ফন্ট (সাহসী এবং স্বাভাবিক) এর দুটি ভিন্ন ধরনের কিন্তু আপনি কটাক্ষপাত বিভিন্ন ফন্টের আকার, বিভিন্ন রঙ, তির্যক, আন্ডারলাইন ইত্যাদি থাকতে পারে NSAttributedString / NSMutableAttributedString এবং CoreText স্ট্রিং কী বৈশিষ্ট্যাবলী

আশা করি এটা সাহায্য করবে


2
দুর্ভাগ্যক্রমে, এটি (এবং অন্যান্য উত্তর) আন্তর্জাতিকীকরণ বান্ধব নয়। এইচটিএমএল ট্যাগগুলি অ্যান্ড্রয়েডের মতো (<b>, <i>) সমর্থন করে দুর্দান্ত হত been
ভিক্টর জি

1
যেহেতু এটি একটি উদাহরণ তাই আমি পছন্দ করি যে জিনিসটি না পরিচালনা করা। আপনার যদি স্থানীয়করণের প্রয়োজন হয় তবে আপনি এনএসডিট থেকে তারিখের উপাদানটি পেতে পারেন এবং যথাযথ বোল্ড / নন-বোল্ড রেঞ্জগুলি প্রোগ্রামিকভাবে খুঁজে পেতে পারেন (হার্ড-কোডিং রেঞ্জগুলির পরিবর্তে, উপরের কোডে মন্তব্য রয়েছে যে হার্ডকোডিং আদর্শ নয়)
nacho4d

1
আপনি আপনার কোডে আরও বেশি পঠনযোগ্য অবজেক্টিভ-সি আক্ষরিক ব্যবহার বিবেচনা করবেন। উদাহরণস্বরূপ [NSDictionary dictionaryWithObjectsAndKeys: boldFont, NSFontAttributeName, foregroundColor, NSForegroundColorAttributeName, nil]হয়ে যায় @{ NSFontAttributeName: boldFont, NSForegroundColorAttributeName: foregroundColor }
প্যাট্রিকএনএলটি

@ nacho4d দুর্দান্ত! তবে একটি টাইপো রয়েছে: সিনট্যাক্সের জন্য বক্রাকার বন্ধনী ( {) বর্গাকার বন্ধনী ( [) নয়।
প্যাট্রিকএনএলটি

আমি এমন কিছু কোড যুক্ত করেছি যা একটি আন্তর্জাতিকীকরণ বান্ধব পদ্ধতির দেখায়
nacho4d

85

ইউআইএলবেলে একটি বিভাগ চেষ্টা করুন:

এটি কীভাবে ব্যবহৃত হয়েছে তা এখানে:

myLabel.text = @"Updated: 2012/10/14 21:59 PM";
[myLabel boldSubstring: @"Updated:"];
[myLabel boldSubstring: @"21:59 PM"];

এবং এখানে বিভাগ

UILabel + + Boldify.h

- (void) boldSubstring: (NSString*) substring;
- (void) boldRange: (NSRange) range;

UILabel + + Boldify.m

- (void) boldRange: (NSRange) range {
    if (![self respondsToSelector:@selector(setAttributedText:)]) {
        return;
    }
    NSMutableAttributedString *attributedText = [[NSMutableAttributedString alloc] initWithAttributedString:self.attributedText];
    [attributedText setAttributes:@{NSFontAttributeName:[UIFont boldSystemFontOfSize:self.font.pointSize]} range:range];

    self.attributedText = attributedText;    
}

- (void) boldSubstring: (NSString*) substring {
    NSRange range = [self.text rangeOfString:substring];
    [self boldRange:range];
}

মনে রাখবেন এটি কেবল আইওএস 6 এবং তারপরেই কাজ করবে। এটি আইওএস 5 এবং এর আগেও উপেক্ষা করা হবে।


2
চমৎকার বিভাগ। যদিও এটি ফন্টকে সাহসী করবে না। এটি করার জন্য আপনার এটি করা উচিত ছিল: @{NSFontAttributeName:[UIFont boldSystemFontOfSize:self.font.pointSize]}আমি
উত্সাহিত

1
যদি আপনার লেবেলের ফন্টটি সিস্টেম ফন্ট না হয়, তবে পরিবর্তন করতে হবে: [UIFont boldSystemFontOfSize:self.font.pointSize]টু[UIFont fontWithName:self.font.fontName size:self.font.pointSize]
লি

48

ইন্টারফেস বিল্ডারে এটি করা সহজ :

1) করা UILabel এট্রিবিউটেড মধ্যে গুণাবলী পরিদর্শক

সাহসের উদাহরণ উদাহরণ 1

2) আপনি সাহসী করতে চান এমন বাক্যাংশের অংশটি নির্বাচন করুন

সাহসের উদাহরণ উদাহরণ 2

3) এর হরফ (বা একই ফন্টের সাহসী টাইপফেস) ফন্ট নির্বাচনকারীতে পরিবর্তন করুন

সাহসের উদাহরণ উদাহরণ 3

এখানেই শেষ!


দেখে মনে হচ্ছে আপনি কেবল সাহসী (এবং অন্যান্য ফন্টের ধরণের) জন্য এটি করতে পারেন, আন্ডারলাইনের মতো অন্যান্য বৈশিষ্ট্য প্রয়োগের জন্য নয়? (যদিও ফন্টটি বাছাইকারীগুলিতে সেগুলি রয়েছে, আমার জন্য আন্ডারলাইন গ্রেভ করে দেওয়া হয়েছে) আপনি কি একই আচরণ দেখছেন?
pj4533

2
দেখতে দেখতে এটি স্ট্যাটিক পাঠ্যের পক্ষে ভাল, যাইহোক এই পোস্টটি পড়ার আগে আমি এটি জানি না।
প্রীতম

এই নতুন ইন্টারফেস বিল্ডারের বৈশিষ্ট্যটির সাথে আমার উদ্বেগটি হ'ল আপনি কোনও নির্দিষ্ট কাস্টম ফন্ট বেছে নিতে বাধ্য হয়েছেন, সিস্টেম ফন্টটি আর এইভাবে আংশিক দৃষ্টিশক্তিযুক্ত লোক / অ্যাক্সেসযোগ্যতার জন্য সমস্ত সিস্টেমের প্রয়োগের হাতছাড়া করবে?
লাইটোমে

1
আমি আমার পাঠ্যের কিছু অংশ সাহসী করে তুলেছি এবং এটি দেখায় যে এটি কীভাবে বৈশিষ্ট্য পরিদর্শক হিসাবে অনুমিত হবে তবে সিমুলেটর বা এমনকি স্টোরিবোর্ডে নয়।
বেসাত

45

ব্রব্রেমের বিভাগের ভিত্তিতে বিভাগ রয়েছে। এটি একইরকম কাজ করে, তবে আপনাকে একই পরিমাণে বহুসংখ্যক UILabelফলাফলের সাথে সাহসী করতে দেয় ।

UILabel + + Boldify.h

@interface UILabel (Boldify)
- (void) boldSubstring: (NSString*) substring;
- (void) boldRange: (NSRange) range;
@end

UILabel + + Boldify.m

@implementation UILabel (Boldify)
- (void)boldRange:(NSRange)range {
    if (![self respondsToSelector:@selector(setAttributedText:)]) {
        return;
    }
    NSMutableAttributedString *attributedText;
    if (!self.attributedText) {
        attributedText = [[NSMutableAttributedString alloc] initWithString:self.text];
    } else {
        attributedText = [[NSMutableAttributedString alloc] initWithAttributedString:self.attributedText];
    }
    [attributedText setAttributes:@{NSFontAttributeName:[UIFont boldSystemFontOfSize:self.font.pointSize]} range:range];
    self.attributedText = attributedText;
}

- (void)boldSubstring:(NSString*)substring {
    NSRange range = [self.text rangeOfString:substring];
    [self boldRange:range];
}
@end

এই সংশোধনগুলির সাহায্যে আপনি এটি একাধিকবার ব্যবহার করতে পারেন, যেমন:

myLabel.text = @"Updated: 2012/10/14 21:59 PM";
[myLabel boldSubstring: @"Updated:"];
[myLabel boldSubstring: @"21:59 PM"];

এর সাথে ফলাফল হবে: " আপডেট হয়েছে: 2012/10/14 21:59 অপরাহ্ন "।


ক্রেজি এটি শেষ সাবস্ট্রিংকে কেবলমাত্র 21:59 অপরাহ্নকে বোল্ড করবে।
প্রজিৎ শ্রেষ্ঠ

আমি এটি বছরখানেক আগে পরীক্ষা করেছি এবং দেখে মনে হয়েছিল সেই সময়ে এটি কাজ করবে। আমার পোস্টের পুরো বিষয়টি হ'ল একাধিক সাহসী হ্যান্ডেলগুলি ব্র্যাব্রেমের বিভাগে পরিবর্তন করা। আমি এই মুহুর্তে এটি করতে পারি না, তবে দুই সপ্তাহের মধ্যে আমি এই কোডটি কাজ করছে কিনা তা নিশ্চিত করার জন্য এটি পুনরায় পরীক্ষা করব test
ক্রেজি ইয়োগার্ট

ক্রেজি আমার উত্তর চেক করুন plz। এবং দয়া করে কীভাবে এটি পুনরায় ব্যবহারযোগ্য করে তুলতে হবে তার পরামর্শ দিন।
প্রজিৎ শ্রেষ্ঠ

27

এটি আমার পক্ষে কাজ করেছে:

CGFloat boldTextFontSize = 17.0f;

myLabel.text = [NSString stringWithFormat:@"%@ 2012/10/14 %@",@"Updated:",@"21:59 PM"];

NSRange range1 = [myLabel.text rangeOfString:@"Updated:"];
NSRange range2 = [myLabel.text rangeOfString:@"21:59 PM"];

NSMutableAttributedString *attributedText = [[NSMutableAttributedString alloc] initWithString:myLabel.text];

[attributedText setAttributes:@{NSFontAttributeName:[UIFont boldSystemFontOfSize:boldTextFontSize]}
                        range:range1];
[attributedText setAttributes:@{NSFontAttributeName:[UIFont boldSystemFontOfSize:boldTextFontSize]}
                        range:range2];

myLabel.attributedText = attributedText;

সুইফ্ট সংস্করণের জন্য: এখানে দেখুন


সুন্দর এবং সরল! ধন্যবাদ!
মোনা

25

আমি সুইফট এক্সটেনশনের ক্রেজি ইওগার্টের উত্তর গ্রহণ করেছি।

extension UILabel {

    func boldRange(_ range: Range<String.Index>) {
        if let text = self.attributedText {
            let attr = NSMutableAttributedString(attributedString: text)
            let start = text.string.characters.distance(from: text.string.startIndex, to: range.lowerBound)
            let length = text.string.characters.distance(from: range.lowerBound, to: range.upperBound)
            attr.addAttributes([NSFontAttributeName: UIFont.boldSystemFont(ofSize: self.font.pointSize)], range: NSMakeRange(start, length))
            self.attributedText = attr
        }
    }

    func boldSubstring(_ substr: String) {
        if let text = self.attributedText {
            var range = text.string.range(of: substr)
            let attr = NSMutableAttributedString(attributedString: text)
            while range != nil {
                let start = text.string.characters.distance(from: text.string.startIndex, to: range!.lowerBound)
                let length = text.string.characters.distance(from: range!.lowerBound, to: range!.upperBound)
                var nsRange = NSMakeRange(start, length)
                let font = attr.attribute(NSFontAttributeName, at: start, effectiveRange: &nsRange) as! UIFont
                if !font.fontDescriptor.symbolicTraits.contains(.traitBold) {
                    break
                }
                range = text.string.range(of: substr, options: NSString.CompareOptions.literal, range: range!.upperBound..<text.string.endIndex, locale: nil)
            }
            if let r = range {
                boldRange(r)
            }
        }
    }
}

রেঞ্জ এবং এনএসরেঞ্জের মধ্যে ভাল রূপান্তর নাও থাকতে পারে তবে আমি এর থেকে ভাল কিছু পাইনি।


1
অনেক ধন্যবাদ! ঠিক আমার কী দরকার! আমি দ্বিতীয় লাইন পরিবর্তিত boldSubstring(_:)করতে var range = text.string.range(of: substr, options: .caseInsensitive)বিভিন্ন ক্যাপিটালাইজেশন এছাড়াও সাহসী সঙ্গে বন্ধুত্ব গড়ে তুলুন স্ট্রিং করতে।
fl034

21

পরীক্ষা করে দেখুন TTTAttributedLabel । এটি ইউআইএলবেলের একটি ড্রপ-ইন প্রতিস্থাপন যা আপনাকে সেই লেবেলের পাঠ্য হিসাবে এনএসএট্রিবিউটেড স্ট্রিং সেট করে একটি একক লেবেলে মিশ্রিত ফন্ট এবং রং রাখতে দেয়।


5
প্রতিস্থাপনের ড্রপ ব্যবহারের সাথে একমত হতে পেরেছি (আশেপাশে কয়েকটি রয়েছে)। অ্যাপল কেবল এই স্টাফটিতে তাদের কাজ শেষ করেনি। একাডেমিক অনুশীলন ব্যতীত আমি মনে করি না যে এই জগাখিরিটি বোঝার এবং বাস্তবায়নের চেষ্টা করা সত্যই মূল্যবান - এটি সম্ভবত পরবর্তী প্রকাশে (বা তাই) সুন্দরভাবে পরিচ্ছন্ন হতে চলেছে। :) github.com/AliSoftware/OHAttributesLabel
ট্র্যাপার

@ ট্র্যাপার - আপনি এই লিঙ্কটি দিয়ে আমার দিনটি বাঁচিয়েছেন ... +1000!
হাঁস

আমি পাশাপাশি ওএএচটিগ্রিবিউটেড লেবেলকেও সুপারিশ করি। আপনি ডান স্ট্রিংতে <b> এবং <u> (এবং অন্যান্য) এর মতো এইচটিএমএল ট্যাগগুলি ব্যবহার করতে পারেন।
RyanG

12

এই ক্ষেত্রে আপনি চেষ্টা করতে পারেন,

UILabel *displayLabel = [[UILabel alloc] initWithFrame:/*label frame*/];
displayLabel.font = [UIFont boldSystemFontOfSize:/*bold font size*/];

NSMutableAttributedString *notifyingStr = [[NSMutableAttributedString alloc] initWithString:@"Updated: 2012/10/14 21:59 PM"];
[notifyingStr beginEditing];
[notifyingStr addAttribute:NSFontAttributeName
                     value:[UIFont systemFontOfSize:/*normal font size*/]
                     range:NSMakeRange(8,10)/*range of normal string, e.g. 2012/10/14*/];
[notifyingStr endEditing];

displayLabel.attributedText = notifyingStr; // or [displayLabel setAttributedText: notifyingStr];

দ্রষ্টব্য বরাদ্দ ট্যাগ প্রথম মান (যেমন displayLabel.text = @ "আপডেট করা হয়েছে: 2013/12/23 21:59 অপরাহ্ণ";)
Mazen Kasser

8

পাঠ্যকে সাহসী করার পাশাপাশি কোনও ইউআইএলবেলরে আন্ডারলাইন করা। আপনার কোডে কেবল নিম্নলিখিত লাইনগুলি যুক্ত করুন।

NSRange range1 = [lblTermsAndCondition.text rangeOfString:NSLocalizedString(@"bold_terms", @"")];
NSRange range2 = [lblTermsAndCondition.text rangeOfString:NSLocalizedString(@"bold_policy", @"")];
NSMutableAttributedString *attributedText = [[NSMutableAttributedString alloc] initWithString:lblTermsAndCondition.text];
[attributedText setAttributes:@{NSFontAttributeName:[UIFont fontWithName:fontBold size:12.0]}
                        range:range1];
[attributedText setAttributes:@{NSFontAttributeName:[UIFont fontWithName:fontBold size:12.0]}
                        range:range2];


[attributedText addAttribute:(NSString*)kCTUnderlineStyleAttributeName
                  value:[NSNumber numberWithInt:kCTUnderlineStyleSingle]
                  range:range1];

[attributedText addAttribute:(NSString*)kCTUnderlineStyleAttributeName
                       value:[NSNumber numberWithInt:kCTUnderlineStyleSingle]
                       range:range2];



lblTermsAndCondition.attributedText = attributedText;

5

নীচের কোডটি ব্যবহার করুন। আমি আশা করি এটি আপনার জন্য সাহায্য করবে

NSString *needToChangeStr=@"BOOK";
NSString *display_string=[NSString stringWithFormat:@"This is %@",book];

NSMutableAttributedString *attri_str=[[NSMutableAttributedString alloc]initWithString:display_string];

int begin=[display_string length]-[needToChangeStr length];
int end=[needToChangeStr length];


[attri_str addAttribute:NSFontAttributeName value:[UIFont fontWithName:@"HelveticaNeue-Bold" size:30] range:NSMakeRange(begin, end)];

4

সুইফট 4:

// attribute with color red and Bold
var attrs1 = [NSAttributedStringKey.font: UIFont.boldSystemFont(ofSize: 20), NSAttributedStringKey.foregroundColor: UIColor.red]

// attribute with color black and Non Bold
var attrs2 = [NSAttributedStringKey.font: UIFont(name: "Roboto-Regular", size: 20), NSAttributedStringKey.foregroundColor: UIColor.black]  

var color1 = NSAttributedString(string: "RED", attributes: attrs1)

var color2 = NSAttributedString(string: " BLACK", attributes: attrs2)

var string = NSMutableAttributedString()

string.append(color1)

string.append(color2)

// print the text with **RED** BLACK
print("Final String : \(string)")

3

আশা করি এটি আপনার প্রয়োজন মেটাবে। ইনপুট হিসাবে প্রক্রিয়া করতে স্ট্রিং সরবরাহ করুন এবং ইনপুট হিসাবে গা bold় / বর্ণযুক্ত হওয়া উচিত এমন শব্দগুলি সরবরাহ করুন।

func attributedString(parentString:String, arrayOfStringToProcess:[String], color:UIColor) -> NSAttributedString
{
    let parentAttributedString = NSMutableAttributedString(string:parentString, attributes:nil)
    let parentStringWords = parentAttributedString.string.components(separatedBy: " ")
    if parentStringWords.count != 0
    {
        let wordSearchArray = arrayOfStringToProcess.filter { inputArrayIndex in
            parentStringWords.contains(where: { $0 == inputArrayIndex }
            )}
        for eachWord in wordSearchArray
        {
            parentString.enumerateSubstrings(in: parentString.startIndex..<parentString.endIndex, options: .byWords)
            {
                (substring, substringRange, _, _) in
                if substring == eachWord
                {
                    parentAttributedString.addAttribute(.font, value: UIFont.boldSystemFont(ofSize: 15), range: NSRange(substringRange, in: parentString))
                    parentAttributedString.addAttribute(.foregroundColor, value: color, range: NSRange(substringRange, in: parentString))
                }
            }
        }
    }
    return parentAttributedString
}

ধন্যবাদ. শুভ কোডিং।


2

আমি সবেমাত্র আমার প্রকল্পে (সুইফটে) প্রয়োগ করে নিম্নলিখিত কোডটি দিয়ে এনএসরেঞ্জের প্রয়োজন নেই:

    //Code sets label (yourLabel)'s text to "Tap and hold(BOLD) button to start recording."
    let boldAttribute = [
        //You can add as many attributes as you want here.
        NSFontAttributeName: UIFont(name: "HelveticaNeue-Bold", size: 18.0)!]

    let regularAttribute = [
        NSFontAttributeName: UIFont(name: "HelveticaNeue-Light", size: 18.0)!]

    let beginningAttributedString = NSAttributedString(string: "Tap and ", attributes: regularAttribute )
    let boldAttributedString = NSAttributedString(string: "hold ", attributes: boldAttribute)
    let endAttributedString = NSAttributedString(string: "button to start recording.", attributes: regularAttribute )
    let fullString =  NSMutableAttributedString()

    fullString.appendAttributedString(beginningAttributedString)
    fullString.appendAttributedString(boldAttributedString)
    fullString.appendAttributedString(endAttributedString)

    yourLabel.attributedText = fullString

1

আপনি যদি বিশিষ্ট স্ট্রিংগুলি ব্যবহার করে আরও সহজ করতে চান তবে অ্যাট্রিবিউটেড স্ট্রিং ক্রিয়েটার ব্যবহার করে দেখুন, যা আপনার জন্য কোড তৈরি করবে। https://itunes.apple.com/us/app/attributed-string-creator/id730928349

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