2012-06-14 4 views
41

Czy mogę ustawić właściwość attributedText obiektu ? Próbowałem poniższy kod:Czy można ustawić właściwość `attributedText` obiektu` UILabel`

UILabel *label = [[UILabel alloc] init]; 
label.attributedText = @"asdf"; 

Ale daje ten błąd:

Property "attributedText" not found on object of type 'UILabel *'

#import <CoreText/CoreText.h> nie działa

+0

Użyj tego linku http://stackoverflow.com/questions/3786528/iphone-ipad-how-exactly-use-nsattributedstring – Rajneesh071

+0

myślę, że ten jest przydatny do u http : //stackoverflow.com/questions/3786528/iphone-ipad-how-exactly-use-nsattributedstring – Rajneesh071

Odpowiedz

31

niestety UILabel robi 't obsługuje przypisane ciągi. Zamiast tego można użyć OHAttributedLabel.

Aktualizacja: Ponieważ iOS6, UILabel obsługuje łańcuchy przypisane. Zobacz odpowiedź UILabel reference lub Michaela Kesslera poniżej, aby uzyskać więcej informacji.

+37

Od wersji iOS 6 UILabel obsługuje przypisane ciągi znaków za pośrednictwem właściwości attributedText. – Greg

1

nadzieję, że to pomaga;)

NSMutableAttributedString* attrStr = [NSMutableAttributedString attributedStringWithString:@"asdf"]; 
[attrStr setFont:[UIFont systemFontOfSize:12]]; 
[attrStr setTextColor:[UIColor grayColor]]; 
[attrStr setTextColor:[UIColor redColor] range:NSMakeRange(0,5)]; 
lbl.attributedText = attrStr; 
+0

Po prostu użyj powyższego kodu i powinno działać. Nic więcej do zrobienia. – Blade

+0

podaje błąd: nie znaleziono obiektu "attributedText" na obiekcie typu "UILabel *" – Shamsiddin

+0

Spróbuj importować "CoreText.framework". A następnie umieścić w pliku .h #import Blade

196

Powyżej znajduje się pełna przykładów, jak używać przypisać tekst na etykiecie:

NSString *redText = @"red text"; 
NSString *greenText = @"green text"; 
NSString *purpleBoldText = @"purple bold text"; 

NSString *text = [NSString stringWithFormat:@"Here are %@, %@ and %@", 
        redText, 
        greenText, 
        purpleBoldText]; 

// If attributed text is supported (iOS6+) 
if ([self.label respondsToSelector:@selector(setAttributedText:)]) { 

    // Define general attributes for the entire text 
    NSDictionary *attribs = @{ 
           NSForegroundColorAttributeName: self.label.textColor, 
           NSFontAttributeName: self.label.font 
           }; 
    NSMutableAttributedString *attributedText = 
     [[NSMutableAttributedString alloc] initWithString:text 
               attributes:attribs]; 

    // Red text attributes 
    UIColor *redColor = [UIColor redColor]; 
    NSRange redTextRange = [text rangeOfString:redText];// * Notice that usage of rangeOfString in this case may cause some bugs - I use it here only for demonstration 
    [attributedText setAttributes:@{NSForegroundColorAttributeName:redColor} 
          range:redTextRange]; 

    // Green text attributes 
    UIColor *greenColor = [UIColor greenColor]; 
    NSRange greenTextRange = [text rangeOfString:greenText];// * Notice that usage of rangeOfString in this case may cause some bugs - I use it here only for demonstration 
    [attributedText setAttributes:@{NSForegroundColorAttributeName:greenColor} 
          range:greenTextRange]; 

    // Purple and bold text attributes 
    UIColor *purpleColor = [UIColor purpleColor]; 
    UIFont *boldFont = [UIFont boldSystemFontOfSize:self.label.font.pointSize]; 
    NSRange purpleBoldTextRange = [text rangeOfString:purpleBoldText];// * Notice that usage of rangeOfString in this case may cause some bugs - I use it here only for demonstration 
    [attributedText setAttributes:@{NSForegroundColorAttributeName:purpleColor, 
            NSFontAttributeName:boldFont} 
          range:purpleBoldTextRange]; 

    self.label.attributedText = attributedText; 
} 
// If attributed text is NOT supported (iOS5-) 
else { 
    self.label.text = text; 
} 
+1

Pamiętaj, że użycie rangeOfString w ten sposób spowoduje błędy, jeśli niektóre części tekstu są podzbiorem innych. Lepiej jest opracować zakresy samodzielnie za pomocą NSRange i ręcznie opracować długość łańcuchów. – owencm

+0

@owen, masz absolutną rację. Ten kod nie może być używany w żadnej sytuacji - szczególnie gdy tekst pochodzi z internetu. Ten fragment kodu demonstruje tylko sposób użycia atrybutuText wraz z kompatybilnością wsteczną ... –

+0

Dobra odpowiedź. Ale cholerne jest to API _obtuse_. – aroth

8
NSString *str1 = @"Hi Hello, this is plain text in red"; 

NSString *cardName = @"This is bold text in blue"; 

NSString *text = [NSString stringWithFormat:@"%@\n%@",str1,cardName]; 


// Define general attributes for the entire text 
NSDictionary *attribs = @{ 
          NSForegroundColorAttributeName:[UIColor redColor], 
          NSFontAttributeName: [UIFont fontWithName:@"Helvetica" size:12] 
          }; 
NSMutableAttributedString *attributedText = [[NSMutableAttributedString alloc] initWithString:text attributes:attribs]; 


UIFont *boldFont = [UIFont fontWithName:@"Helvetica-Bold" size:14.0]; 
NSRange range = [text rangeOfString:cardName]; 
[attributedText setAttributes:@{NSForegroundColorAttributeName: [UIColor blueColor], 
           NSFontAttributeName:boldFont} range:range]; 


myLabel = [[UILabel alloc] initWithFrame:CGRectZero]; 

myLabel.attributedText = attributedText; 
5

Dla osób korzystających Swift, oto jedna wkładka:

myLabel.attributedText = NSMutableAttributedString(string: myLabel.text!, attributes: [NSFontAttributeName:UIFont(name: "YourFont", size: 12), NSForegroundColorAttributeName: UIColor.whiteColor()]) 
3

tak, tutaj jest kod, który ma różne właściwości dla podciągów, ciągu znaków.

NSString *[email protected]"10 people likes this"; 
    NSString *[email protected]"likes this"; 
    if ([str hasSuffix:str2]) 
    { 
     NSMutableAttributedString * string = [[NSMutableAttributedString alloc] initWithString:str]; 

    // for string 1 // 

     [string addAttribute:NSForegroundColorAttributeName value:[UIColor blueColor] range:NSMakeRange(0,str.length-str2.length)]; 
     [string addAttribute:NSFontAttributeName value:[UIFont boldSystemFontOfSize:14] range:NSMakeRange(0,str.length-str2.length)]; 
    // for string 2 // 

     [string addAttribute:NSForegroundColorAttributeName value:[UIColor greenColor] range:NSMakeRange((str.length-str2.length),str2.length)]; 
     [string addAttribute:NSFontAttributeName value:[UIFont italicSystemFontOfSize:12] range:NSMakeRange((str.length-str2.length),str2.length)]; 
     label.attributedText=string; 
    } 
    else 
    { 
     label.text =str; 

    } 
0
UIFont *font = [UIFont boldSystemFontOfSize:12]; 
NSDictionary *fontDict = [NSDictionary dictionaryWithObject: font forKey:NSFontAttributeName]; 
NSMutableAttributedString *attrString = [[NSMutableAttributedString alloc] initWithString:@" v 1.2.55" attributes: fontDict]; 

UIFont *fontNew = [UIFont boldSystemFontOfSize:17]; 
NSDictionary *fontDictNew = [NSDictionary dictionaryWithObject: fontNew forKey:NSFontAttributeName]; 
NSMutableAttributedString *attrStringNew = [[NSMutableAttributedString alloc] initWithString:@“Application” attributes: fontDictNew]; 
[attrStringNew appendAttributedString: attrString]; 
self.vsersionLabel.attributedText = attrStringNew;