Tek bir UILabel'de Kalın ve Kalın Olmayan Metin?


254

Bir uiLabel içine hem kalın hem de kalın olmayan metin eklemek nasıl mümkün olabilir?

Ben bir UIWebView kullanmak istemem .. Ben de bu NSAttributedString kullanarak mümkün olabilir okudum ama nasıl kullanılacağı hakkında hiçbir fikrim yok. Herhangi bir fikir?

Apple bunu birkaç uygulamasında başarıyor; Örnekler Ekran Görüntüsü:bağlantı metni

Teşekkürler! - Dom


Check out Bu konuyu daha önceki yığın taşması gelen. (Temel olarak, iki UILabel oluşturun ve bunları birbirine göre doğru bir şekilde konumlandırın.)
samkass

Yanıtlar:


360

Güncelleme

Swift'te sözdiziminin yanı sıra iOS5 eski şeylerle uğraşmak zorunda değiliz, bu yüzden her şey gerçekten basitleşiyor:

Hızlı 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
}

Hızlı 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
}

Kullanımı:

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

Bonus: Uluslararasılaşma

Bazı insanlar uluslararasılaşma hakkında yorum yaptı. Şahsen bunun bu sorunun kapsamı dışında olduğunu düşünüyorum ama öğretim amaçlı olarak bunu nasıl yapacağım

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

Sonuç (İngilizce ve Japonca Localizable.strings var olduğu varsayılarak)

resim açıklamasını buraya girin

resim açıklamasını buraya girin


İOS6 ve sonraki sürümleri için önceki yanıt (Objective-C hala çalışıyor):

İOS6 ise UILabel, UIButton, UITextView, UITextField, destek yarattığımız gerekmez vasıta dizeleri atfedilen CATextLayeratfedilen dizeleri için bizim alıcı olarak s. Ayrıca atfedilen dizgiyi daha fazla yapmak için artık CoreText ile oynamamız gerekmiyor :) obj-c Foundation.framework gibi yeni sınıflarımız NSParagraphStyleve hayatımızı kolaylaştıracak diğer sabitler var. Yaşasın!

Bu dizeye sahipsek:

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

Yalnızca ilişkilendirilmiş dizeyi oluşturmamız gerekir:

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];
}

İyi tanıtım blog yayınının çift var burada at adamlardan invasivecode ait daha fazla örnek kullanımları açıklamak NSAttributedStringiçin görünüm "iOS 6 için NSAttributedString Giriş" ve "Interface Builder kullanarak iOS için ilişkilendirilir dizeleri" :)

PS: Kodun üstünde çalışmalı ama beyin derlendi. Umarım yeterlidir :)


İOS5 ve önceki sürümler için Eski Yanıt

NSAttributedString ile bir CATextLayer kullanın ! 2 UILabel'den daha hafif ve daha basit. (iOS 3.2 ve üstü)

Misal.

QuartzCore çerçevesini (CALayers için gerekli) ve CoreText'i (ilişkilendirilmiş dize için gerekli) eklemeyi unutmayın.

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

Aşağıdaki örnek, gezinti denetleyicisinin araç çubuğuna bir alt katman ekleyecektir. iPhone'da à la Mail.app. :)

- (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;
    }
}

Bu örnekte yalnızca iki farklı yazı tipi (kalın ve normal) var, ancak farklı yazı tipi boyutu, farklı renk, italik, altı çizili vb. De olabilir . NSAttributedString / NSMutableAttributedString ve CoreText öznitelikleri dize anahtarlarını inceleyin .

Umarım yardımcı olur


2
Ne yazık ki, bu (ve diğer cevaplar) Uluslararasılaşma dostu değildir. Android'de olduğu gibi Html etiketleri desteği (<b>, <i>) harika olurdu.
Victor G

1
Bu bir örnek olduğu için bu şeyi ele almamayı tercih ettim. Yerelleştirmeye ihtiyacınız varsa, tarih bileşenini NSDate'den alabilir ve programlı olarak uygun kalın / kalın olmayan aralıkları bulabilirsiniz (aralıkları sabit kodlamak yerine, yukarıdaki kodda sabit kodlamanın ideal olmadığını belirten yorumlar vardır)
nacho4d

1
Kodunuzda daha okunabilir Objective-C değişmez değerlerini kullanmayı düşünmelisiniz. Mesela [NSDictionary dictionaryWithObjectsAndKeys: boldFont, NSFontAttributeName, foregroundColor, NSForegroundColorAttributeName, nil]olur @{ NSFontAttributeName: boldFont, NSForegroundColorAttributeName: foregroundColor }.
PatrickNLT

@ nacho4d Harika! Ancak bir yazım hatası vardır: sözdizimi köşeli parantez ( {) gerektirir , köşeli parantez ( [) gerektirmez.
PatrickNLT

Uluslararasılaşma dostu bir yaklaşım gösteren bazı kodlar ekledim
nacho4d

85

UILabel'da bir kategori deneyin:

İşte nasıl kullanılır:

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

Ve işte kategori

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];
}

Bunun yalnızca iOS 6 ve sonraki sürümlerde çalışacağını unutmayın. İOS 5 ve önceki sürümlerde yok sayılır.


2
Güzel kategori. Rağmen yazı tipi kalın yapmaz. Bunu yapmak için u böyle yapmalıydım: @{NSFontAttributeName:[UIFont boldSystemFontOfSize:self.font.pointSize]}Ben upvoted
Lonkly

1
Etiketinizin yazı tipi sistem yazı tipi değilse, değiştirmeniz gerekir: [UIFont boldSystemFontOfSize:self.font.pointSize]TO[UIFont fontWithName:self.font.fontName size:self.font.pointSize]
lee

48

Interface Builder'da bunu yapmak kolaydır :

1) olmak UILabel Attributed içinde Müfettiş Özellikler

Kalın Örnek Adım 1

2) kalın yapmak istediğiniz ifadenin bir bölümünü seçin

Kalın Örnek Adım 2

3) yazı tipi seçicide yazı tipini (veya aynı yazı tipinin kalın yazı tipini) değiştirin

Kalın Örnek Adım 3

Bu kadar!


Bunu altyazı gibi diğer nitelikleri uygulamak için değil, yalnızca kalın (ve diğer yazı tipi türleri) için yapabileceğiniz anlaşılıyor. (yazı tipi seçicisinde bunlara sahip olmasına rağmen, alt çizgi gri renkte görünüyor) Aynı davranışı görüyor musunuz?
pj4533

2
statik yazı için iyi gibi görünüyor, zaten bu yazı okumadan önce bunu bilmiyorum.
preetam

Bu yeni Interface Builder özelliğiyle ilgili endişem, artık sistem yazı tipini değil, belirli bir özel yazı tipini seçmek zorunda kalmanızdır, böylece kısmen gören insanlar / erişilebilirlik için tüm sistem uygulamalarını kaçıracaktır?
Litome

1
Metnimin bir kısmını kalınlaştırdım ve nasıl nitelik denetçisinde olması gerektiğini, ancak simülatörde veya film şeridinde olmamasını gösteriyor.
Besat

45

Bbrame kategorisine göre bir kategori var. Benzer şekilde çalışır, ancak UILabelkümülatif sonuçlarla birden çok kez kalınlaştırmanızı sağlar .

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

Bu düzeltmelerle birden çok kez kullanabilirsiniz, örneğin:

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

" Güncelleme: 2012/10/14 21:59 PM " ile sonuçlanır .


Crazy son alt dizeyi sadece cesur olacak yani sadece 21:59.
Prajeet Shrestha

Bir yıl önce test ettim ve o zaman işe yaramış gibi görünüyordu. Yazımın tüm amacı, çoklu kalınlıkları işlemek için bbrame kategorisini değiştirmekti. Bunu şu anda yapamıyorum, ancak iki hafta içinde çalıştığından emin olmak için bu kodu tekrar test edeceğim.
Çılgın Yoğurt

Çılgın kontrol cevap aşağıda plz. Ve lütfen nasıl yeniden kullanılabilir hale getirileceğini önerin.
Prajeet Shrestha

27

Benim için çalıştı:

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;

Swift sürümü için: Buraya Bakın


güzel ve basit! Teşekkür ederim!
Mona

25

Crazy Yoghurt'un swift'in uzantılarına cevabını kabul ettim.

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

Range ve NSRange arasında iyi bir dönüşüm olmayabilir, ancak daha iyi bir şey bulamadım.


1
Çok teşekkürler! Tam olarak ihtiyacım olan şey! İkinci satırı, farklı büyük harfli dizeleri de kalın yapmak boldSubstring(_:)için var range = text.string.range(of: substr, options: .caseInsensitive)değiştirdim.
fl034

21

TTTAttributedLabel'a göz atın . Bu etiketin metni olarak bir NSAttributedString ayarlayarak tek bir etikette karışık yazı tipi ve renklere sahip olmanızı sağlayan UILabel için açılan bir alternatiftir.


5
Yedek bir damla kullanarak kabul etmeliyim (orada birkaç etrafında). Apple bu konudaki çalışmalarını henüz tamamlamadı. Akademik bir alıştırma dışında, bu karışıklığı anlamaya ve uygulamaya çalışmanın gerçekten değerli olduğunu düşünmüyorum - muhtemelen hepsi bir sonraki sürümde (ya da öylesine) güzelce toplanacaktır. :) github.com/AliSoftware/OHAttributedLabel
tuzakçı

@trapper - Günümü bu bağlantıyla kurtardın ... +1000!
Ördek

Ben de OHAttributedLabel öneririz. <b> ve <u> (ve diğerleri) gibi HTML etiketlerini doğrudan dizede kullanabilirsiniz.
RyanG

12

Bu durumda deneyebilirsiniz,

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];

PS Önce etikete değeri atayın (örn. DisplayLabel.text = @ "Güncellendi: 2013/12/23 21:59 PM";)
Mazen Kasser

8

UILabel'de metni kalın ve altını çizmek için. Kodunuza aşağıdaki satırları eklemeniz yeterlidir.

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

Aşağıdaki kodu kullanın. Umarım sana yardımcı olur.

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

Hızlı 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

Umarım bu ihtiyacınızı karşılar. Dizeyi girdi olarak işlemek için ve girdi olarak kalın / renkli olması gereken sözcükleri sağlayın.

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
}

Teşekkür ederim. Mutlu Kodlama.


2

Projemde (Swift'te) uyguladığım aşağıdaki kodla NSRange'a gerek yok:

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

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.