2015-11-02 123 views
0

在我的應用程序中,顯示的是從服務器獲取的用戶註釋。註釋包含用戶名,標籤和一些粗體文本。顯示具有多種格式字的顯示字符串

例如:Nancy標記Clothing:第2季,情節5.在哪裏他們會發現所有的舊衣服」

詞語「南希」和「服裝:」應該是灰色和橙色顏色分別和「第2季第5集」。應該大膽。

我試過使用NSAttributedString但未能實現上述目標。

以下是我嘗試更改顏色但沒有更改的代碼。我不太確定如何使用NSAttributedString。

NSMutableAttributedString *title = [[NSMutableAttributedString alloc] initWithString:[NSString stringWithFormat:@"%@:", tag.title]]; 
    [title addAttribute:NSForegroundColorAttributeName value:[UIColor colorWithRed:246/255.0 green:139/255.0 blue:5/255.0 alpha:1.0f] range:NSMakeRange(0,[title length])]; 
    self.tagCommentLabel.text = [NSString stringWithFormat:@"%@ tagged %@: %@ %@",tag.user.name , title, episode, tag.comment]; 

有人可以幫我一個代碼,我怎麼才能實現所需格式的例句?

回答

0

NSAttributedString和NSString是兩個不同的東西。如果你想添加屬性的NSString(如改變文本的顏色),您必須首先做出的NSString:

NSString *string = [NSString stringWithFormat:@"%@ tagged %@: %@ %@",tag.user.name , title, episode, tag.comment]; 

然後你從你的NSString使NSMutableAttributedString和屬性添加到它:

NSMutableAttributedString *attString = [[NSMutableAttributedString alloc] initWithString:string]; 
[attString addAttribute:NSForegroundColorAttributeName value:[UIColor colorWithRed:246/255.0 green:139/255.0 blue:5/255.0 alpha:1.0f] range:[string rangeOfString:title]; 

而當你想顯示你的屬性串,你應該使用替代的.text .attributedText:

self.tagCommentLabel.attributedText = attString; 
+0

但我不希望整個字符串具有相同的格式。我希望用戶名稱爲灰色,標題爲橙色,情節爲粗體。用戶名,標題,劇集和評論是來自服務器的不同對象。我將這些對象一起顯示在標籤「self.tagCommentLabel.text」中的一個句子中,如示例中所示。 –

+0

我明白他們是不同的對象。在我的示例中,我只是向您展示了您在發佈的代碼中必須做的事情,以便爲標題着色。您可以對從服務器獲取的所有不同對象(字符串)執行相同操作。例如,如果你想爲評論着色,你可以這樣做:[attString addAttribute ... range:[string rangeOfString:tag.comment] – Preemoz

+0

它完美的工作。萬分感謝!! –

0

你將不得不添加邏輯,因爲我敢肯定,你不想總是顏色/加粗這個特定的詞,但在這裏,你去用一個簡單的例子:

NSString *title = @"Nancy tagged Clothing: Season 2, Episode 5. where do they find all the old clothes"; 
NSMutableAttributedString *attributedString = [[NSMutableAttributedString alloc] initWithString:title]; 

// Color text for range of string 
[attributedString addAttribute:NSForegroundColorAttributeName 
         value:[UIColor grayColor] 
         range:[title rangeOfString:@"Nancy"]]; 
[attributedString addAttribute:NSForegroundColorAttributeName 
         value:[UIColor grayColor] 
         range:[title rangeOfString:@"Clothing"]]; 

// Bold (be careful, I have used system font with bold and 14.0 size, change the values as for yourself) 
[attributedString addAttribute:NSFontAttributeName 
         value:[UIFont systemFontOfSize:14.0 weight:UIFontWeightBold] 
         range:[title rangeOfString:@"Season 2"]]; 
[attributedString addAttribute:NSFontAttributeName 
         value:[UIFont systemFontOfSize:14.0 weight:UIFontWeightBold] 
         range:[title rangeOfString:@"Season 5"]]; 

self.tagCommentLabel.attributesText = attributedString; 

編輯:爲了讓你的代碼工作,刪掉就行了:

self.tagCommentLabel.text = [NSString stringWithFormat:@"%@ tagged %@: %@ %@",tag.user.name , title, episode, tag.comment]; 

而是我的靜態文本分配給標題,將其更改爲:

NSString *title = [NSString stringWithFormat:@"%@ tagged %@: %@ %@",tag.user.name , title, episode, tag.comment]; 
+0

該文本不是硬編碼。它來自服務器。是的,這些文本的部分總是需要顏色/粗體。我試過你的代碼,它給了我早些時候給出的結果。它打印這個標記爲「錯誤{NSColor =」UIDeviceRGBColorSpace 1 0.5 0 1「; }在文本內 –

+0

請參閱編輯,執行更改以查看結果。 – sunshinejr

+0

感謝您的回答.. –