2011-04-21 71 views
2

我是一個小問題的堆棧。UILabel文本爲html文本

我需要使用一個句子,其中前兩個單詞是粗體,後兩個單詞是斜體。

like I am使用和O bjective C開發人員。

如何做到這一點。目標C中可能嗎?

問候,

+0

不能添加兩個'UIlabel'?如果是這樣,第一個用粗體,另一個用斜體。 – 2011-04-21 12:22:17

回答

8

對於iOS7您可以使用此:

NSString * htmlString = @"<html><body> Some html string </body></html>"; 
NSAttributedString * attrStr = [[NSAttributedString alloc] initWithData:[htmlString dataUsingEncoding:NSUnicodeStringEncoding] options:@{ NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType } documentAttributes:nil error:nil]; 

UILabel * myLabel = [UILabel alloc] init]; 
myLabel.attributedText = attrStr; 
+0

它的工作鏈接? – 2016-06-08 16:59:40

0

你最好的選擇可能是用一個UIWebView來代替的UILabel和使用HTML做格式化。

[編輯]

如果你有很多人,認爲有太多的性能損失,你可以(從iOS 3.2開始)也考慮NSAttributedString,雖然這將是一個更大量的編碼。

+0

Oi,不要使用'UIWebView'來做一些小事。 UIWebView是一個非常昂貴的對象。根據他的要求,他最好創建單獨的標籤或創建靜態圖像。這裏沒有明確的選擇,主要是因爲用例並沒有真正指定,但我不會使用'UIWebView'。 – 2011-04-21 12:27:06

+0

對於很多(簡單)情況,UIWebView沒有明顯的性能影響,但我同意這並不一定是正確的解決方案,而無需瞭解更多關於用例的信息。 – Roger 2011-04-21 12:44:27

+0

感謝羅傑,其實我想用CoreText去。似乎令我信服。 – TechBee 2011-04-25 03:42:50

0

你不能同時使用標準的UILabel實現。但是你可以做一個或另一個。

myLabel.font = [UIFont fontWithName:@"TrebuchetMS-Bold" size:18]; 
3

蘋果公司建議,少量的樣式文本的,你應該使用Web視圖,並顯示在HTML標記並用CSS格式的文本等

個人而言,我從來沒有采取建議,因爲我會考慮一個充滿Web視圖的UI,以致有點過分殺手。

有Core Text框架,如果你想多一點控制你的文本並想使用屬性字符串。

雖然這不是一條線。使用核心文本需要相當多的代碼。

我寫了一個核心文本視圖,它將顯示與文本內聯的可點擊URL鏈接,但我沒有給出任意格式支持。如果您有興趣在文本中顯示鏈接,請查看:https://github.com/jasarien/CoreTextHyperlinkView

您可能也有興趣Oriver Drobnik的富文本視圖,它也基於核心文本。據我所知,你可以餵它HTML,它會產生一個包含你的格式化文本的本地視圖。很有用。它可以在這裏找到:https://github.com/Cocoanetics/DTCoreText

+0

謝謝Jasarien.I我嘗試了這一點。 – TechBee 2011-04-25 03:41:35

+0

Oliver Drobnik的富文本視圖鏈接已損壞! – 2013-04-04 08:51:49

+1

@AlmasAdilbek更新了鏈接 – Jasarien 2013-04-04 09:28:03

2

我寫了一個很小的名爲的THMultiPartLabel幫助我完成這種事情 - 您可以在GitHub here上找到它。這很大程度上取決於傑森對類似問題here的回答。使用這個類,你會實現你的榜樣,像這樣:

UIFont *normal = [UIFont systemFontOfSize:20]; 
UIFont *bold = [UIFont boldSystemFontOfSize:20]; 
UIFont *italic = [UIFont italicSystemFontOfSize:20]; 

NSArray *fonts = [NSArray arrayWithObjects: normal, bold, normal, italic, normal nil]; 
THMultiPartLabel *mpLabel = [[THMultiPartLabel alloc] initWithOffsetX:0 Y:0 defaultFonts:fonts]; 

[mpLabel updateText:@"I ", @"am using ", @"an ", @"Objective C ", "Developer", nil]; 
+0

你認爲人們如何使用它來獲得更長的文本?解決方案應該是通用的,可以迎合更大的文本,但同時應該更易於使用。我並沒有對這個答案給予大拇指,因爲我們應該這樣做,但前提是這不會回答查詢,但這絕不是可接受的解決方案。對不起,但那是我的意見 – 2013-02-13 07:07:54

0

由於iOS 6中,您可以使用NSAttributedString用的UILabel,一個NSAttributedString採取的NSString作爲其contructors的一個參數,之後你可以指定該字符串的範圍具有特定的文本樣式。

你可以找到關於如何做到這一點在iOS 6在這裏一個很好的例子:http://weblog.invasivecode.com/post/31931916393/introduction-to-nsattributedstring-for-ios-6

如果你什麼東西向後兼容的,我強烈建議OHAttributedLabel可以在這裏找到:https://github.com/AliSoftware/OHAttributedLabel

注意:OHAttributedLabel還允許使用html標記來設置標籤文本的樣式。