【发布时间】:2011-08-10 06:33:32
【问题描述】:
我遇到了一个小问题。
我需要使用前两个单词为粗体,后两个单词为斜体的句子。
就像我正在使用一个 Objective C 开发者。
如何做到这一点。这在 Objective C 中可行吗?
问候,
【问题讨论】:
-
你不能加两个
UIlabel吗?如果是这样,第一个是粗体,另一个是斜体。
标签: objective-c ipad ios4
我遇到了一个小问题。
我需要使用前两个单词为粗体,后两个单词为斜体的句子。
就像我正在使用一个 Objective C 开发者。
如何做到这一点。这在 Objective C 中可行吗?
问候,
【问题讨论】:
UIlabel吗?如果是这样,第一个是粗体,另一个是斜体。
标签: objective-c ipad ios4
您最好的选择可能是将 UILabel 替换为 UIWebView 并使用 HTML 进行格式化。
[编辑]
如果您有很多,并且认为对性能的影响太大,您可以(从 iOS 3.2 开始)也考虑NSAttributedString,尽管这需要更多的编码。
【讨论】:
UIWebView 做这么小的事情。 UIWebView 是一个非常昂贵的对象。根据他的要求,他最好创建单独的标签或创建静态图像。这里没有明确的选择,主要是因为没有真正指定用例,但我不会为此使用UIWebView。
您不能同时使用标准的 UILabel 实现。但你可以选择其中一种。
myLabel.font = [UIFont fontWithName:@"TrebuchetMS-Bold" size:18];
【讨论】:
Apple 建议对于少量的样式文本,您应该使用 Web 视图,并显示以 HTML 标记并使用 CSS 等格式化的文本。
就我个人而言,我从未接受过这个建议,因为我认为充满网页视图的 UI 有点过头了。
如果您想对文本进行更多控制并希望使用属性字符串,可以使用 Core Text 框架。
虽然它不是单行的。使用核心文本需要相当多的代码。
我已经编写了一个核心文本视图,它将显示与文本内联的可点击 URL 链接,但我没有为它提供任意格式的支持。如果您有兴趣在文本中显示链接,请查看:https://github.com/jasarien/CoreTextHyperlinkView
您可能对 Oliver Drobnik 的富文本视图感兴趣,它也是基于 Core Text 的。据我所知,你可以给它提供 HTML,它会产生一个包含你的格式化文本的原生视图。很有用。可以在这里找到:https://github.com/Cocoanetics/DTCoreText
【讨论】:
你应该看看核心文本。
这里有一些有用的资源:
【讨论】:
我编写了一个名为 THMultiPartLabel 的非常小的类来帮助我完成这类事情 - 你可以在 GitHub here 上找到它。它很大程度上基于 Jason 对类似问题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];
【讨论】:
从 iOS 6 开始,您可以将 NSAttributedString 与 UILabel 一起使用,NSAttributedString 将 NSString 作为其构造函数之一的参数,之后您可以指定该字符串的哪些范围具有特定的文本样式。
您可以在此处找到有关如何在 iOS 6 上执行此操作的一个很好的示例:http://weblog.invasivecode.com/post/31931916393/introduction-to-nsattributedstring-for-ios-6
如果你有什么向后兼容的东西,我强烈推荐 OHAttributedLabel 可以在这里找到:https://github.com/AliSoftware/OHAttributedLabel
注意:OHAttributedLabel 还允许使用 html 标记来设置标签文本的样式。
【讨论】:
对于 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;
【讨论】: