Testo in grassetto e non in grassetto in un unico UILabel?


254

Come sarebbe possibile includere sia un testo in grassetto che non in grassetto in un uiLabel?

Preferirei non usare un UIWebView .. Ho anche letto che questo potrebbe essere possibile usando NSAttributedString ma non ho idea di come usarlo. Qualche idea?

Apple raggiunge questo obiettivo in molte delle loro app; Schermata di esempi:testo del link

Grazie! - Dom


Dai un'occhiata a questo argomento da un precedente overflow dello stack. (Fondamentalmente, crea due UILabel e posizionali correttamente l'uno rispetto all'altro).
samkass

Risposte:


360

Aggiornare

In Swift non abbiamo a che fare con cose vecchie di iOS5, inoltre la sintassi è più breve, quindi tutto diventa davvero semplice:

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

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

Uso:

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: internazionalizzazione

Alcune persone hanno commentato l'internazionalizzazione. Personalmente penso che questo non rientri nell'ambito di questa domanda, ma per scopi didattici è così che lo farei

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

Risultato (supponendo che siano disponibili stringhe localizable inglesi e giapponesi)

inserisci qui la descrizione dell'immagine

inserisci qui la descrizione dell'immagine


Risposta precedente per iOS6 e versioni successive (Objective-C funziona ancora):

In iOS6 UILabel, UIButton, UITextView, UITextField, supporto attribuito stringhe che significa che non c'è bisogno di creare CATextLayers come il nostro destinatario per le stringhe attribuiti. Inoltre per creare la stringa attribuita non abbiamo più bisogno di suonare con CoreText :) Abbiamo nuove classi in obj-c Foundation.framework comeNSParagraphStyle e altre costanti che ci semplificheranno la vita. Sìì!

Quindi, se abbiamo questa stringa:

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

Dobbiamo solo creare la stringa attribuita:

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

Ci sono un paio di buoni post di blog introduttivi qui da ragazzi di invasivecode che spiegano con più esempi di usi di NSAttributedString, cercano "Introduzione a NSAttributedString per iOS 6" e "Stringhe attribuite per iOS usando Interface Builder" :)

PS: sopra il codice dovrebbe funzionare ma è stato compilato dal cervello. Spero sia abbastanza :)


Vecchia risposta per iOS5 e precedenti

Utilizzare un CATextLayer con un NSAttributedString! molto più leggero e più semplice di 2 UILabels. (iOS 3.2 e versioni successive)

Esempio.

Non dimenticare di aggiungere il framework QuartzCore (necessario per CALayer) e CoreText (necessario per la stringa attribuita.)

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

Nell'esempio seguente verrà aggiunto un sottolivello alla barra degli strumenti del controller di navigazione. à la Mail.app su iPhone. :)

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

In questo esempio ho solo due diversi tipi di carattere (grassetto e normale) ma potresti anche avere dimensioni del carattere diverse, colore diverso, corsivo, sottolineato, ecc. Dai un'occhiata alle chiavi di stringa degli attributi NSAttributedString / NSMutableAttributedString e CoreText .

Spero che sia d'aiuto


2
Sfortunatamente, questa (e le altre risposte) non è favorevole all'internazionalizzazione. Il supporto dei tag HTML (<b>, <i>) come su Android sarebbe stato fantastico.
Victor G

1
Dato che questo è un esempio, ho preferito non gestire quella cosa. Se hai bisogno di localizzazione potresti ottenere il componente data da NSDate e trovare gli intervalli grassetto / non grassetto appropriati a livello di codice (invece di codificare gli intervalli, ci sono commenti nel codice sopra che menzionano l'hardcoding non è l'ideale)
nacho4d

1
Dovresti considerare l'utilizzo dei letterali Objective-C più leggibili nel tuo codice. Ad esempio [NSDictionary dictionaryWithObjectsAndKeys: boldFont, NSFontAttributeName, foregroundColor, NSForegroundColorAttributeName, nil]diventa @{ NSFontAttributeName: boldFont, NSForegroundColorAttributeName: foregroundColor }.
PatrickNLT

@ nacho4d Ottimo! Ma c'è un refuso: la sintassi richiede parentesi graffe ( {), non parentesi quadre ( [).
PatrickNLT

Ho aggiunto del codice che mostra un approccio amichevole verso l'internazionalizzazione
nacho4d,

85

Prova una categoria su UILabel:

Ecco come viene utilizzato:

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

Ed ecco la categoria

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

Nota che funzionerà solo su iOS 6 e versioni successive. Sarà semplicemente ignorato in iOS 5 e precedenti.


2
Bella categoria. Anche se non renderà grassetto il carattere. Per fare ciò, avresti dovuto renderlo tale: @{NSFontAttributeName:[UIFont boldSystemFontOfSize:self.font.pointSize]}ho votato a favore
Lonkly,

1
Se il carattere della tua etichetta non è il carattere di sistema, allora devi cambiare: [UIFont boldSystemFontOfSize:self.font.pointSize]TO[UIFont fontWithName:self.font.fontName size:self.font.pointSize]
lee

48

È facile da fare in Interface Builder :

1) rendere UILabel attribuito in Attributes Inspector

Esempio grassetto Passaggio 1

2) seleziona la parte della frase che vuoi mettere in grassetto

Esempio grassetto Passaggio 2

3) cambia il suo carattere (o carattere grassetto dello stesso carattere) nel selettore di caratteri

Esempio grassetto Passaggio 3

È tutto!


Sembra che puoi farlo solo per grassetto (e altri tipi di carattere), non per applicare altri attributi come sottolineato? (anche se il selettore di caratteri ha quelli, la sottolineatura è disattivata per me) Vedi lo stesso comportamento?
pj4533,

2
sembra, va bene per il testo statico, comunque non lo so prima di leggere questo post.
preetam,

La mia preoccupazione per questa nuova funzione di Interface Builder è che sei costretto a scegliere un tipo di carattere personalizzato specifico, non più il carattere di sistema, quindi perderai tutta l'implementazione del sistema per le persone ipovedenti / l'accessibilità?
Litome

1
Ho reso una parte del mio testo in grassetto e mostra come dovrebbe essere nell'ispettore degli attributi ma non nel simulatore o nello storyboard.
Besat,

45

C'è una categoria basata sulla categoria di bbrame. Funziona in modo simile, ma ti permette di audire UILabelpiù volte lo stesso con risultati cumulativi.

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

Con queste correzioni è possibile utilizzarlo più volte, ad esempio:

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

risulterà con: " Aggiornato: 14/10/2012 alle 21:59 ".


Pazzo metterà in grassetto solo l'ultima sottostringa cioè solo 21:59 PM.
Prajeet Shrestha,

L'ho provato un anno fa e all'epoca sembrava funzionare. L'intero punto del mio post era cambiare la categoria di bbrame per gestire più grassetti. Non posso farlo al momento, ma tra due settimane proverò di nuovo questo codice per assicurarmi che funzioni.
Crazy Yoghurt,

Pazzo controlla la mia risposta qui sotto per favore. E per favore, suggerisci come renderlo riutilizzabile.
Prajeet Shrestha,

27

Ha funzionato per me:

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;

Per la versione Swift: vedi qui


bello e semplice! Grazie!
Mona,

25

Ho adottato la risposta di Crazy Yoghurt alle estensioni di Swift.

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

Potrebbe non esserci una buona conversione tra Range e NSRange, ma non ho trovato qualcosa di meglio.


1
Grazie tante! Esattamente quello di cui avevo bisogno! Ho cambiato la seconda linea in boldSubstring(_:)a var range = text.string.range(of: substr, options: .caseInsensitive)in stringhe fanno con diversa capitalizzazione anche in grassetto.
fl034,

21

Dai un'occhiata a TTTAttributedLabel . È un sostituto drop-in per UILabel che ti permette di avere caratteri e colori misti in una singola etichetta impostando un NSAttributedString come testo per quella etichetta.


5
Devo essere d'accordo con l'utilizzo di un calo nella sostituzione (ce ne sono alcuni in giro). Apple semplicemente non ha ancora completato il lavoro su queste cose. Oltre che come esercizio accademico, non penso che valga davvero la pena cercare di capire e attuare questo pasticcio - probabilmente sarà tutto ben sistemato nella prossima versione (o giù di lì) comunque. :) github.com/AliSoftware/OHAttributedLabel
trapper

@trapper - mi hai salvato la giornata con questo link ... +1000!
Duck,

Consiglio anche OHAttributedLabel. Puoi utilizzare tag HTML come <b> e <u> (e altri) direttamente nella stringa.
RyanG,

12

In questo caso potresti provare,

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 Assegna prima il valore all'etichetta (ad esempio displayLabel.text = @ "Aggiornato: 23/12/2013 alle 21:59";)
Mazen Kasser

8

Per rendere il testo grassetto e sottolineato in una UILabel. Aggiungi le seguenti righe nel tuo codice.

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

Usa il codice qui sotto. Spero ti sia d'aiuto.

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

Swift 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

Spero che questo soddisfi le tue necessità. Fornire la stringa da elaborare come input e fornire le parole che devono essere in grassetto / colorate come input.

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
}

Grazie. Happy Coding.


2

Non è necessario NSRange con il seguente codice che ho appena implementato nel mio progetto (in Swift):

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

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.