带有部分粗体文本的自定义 UITableViewCell
Posted
技术标签:
【中文标题】带有部分粗体文本的自定义 UITableViewCell【英文标题】:Custom UITableViewCell with Partially Bold Text 【发布时间】:2010-03-11 00:31:57 【问题描述】:尝试实现一个 UITableView,其名称类似于内置的联系人 iPhone 应用程序,其中名字为普通字体,姓氏为粗体。一个快速的谷歌表明这并不像听起来那么容易,因为 iPhone SDK 在 UILabel 中缺乏富文本支持。
推荐使用 UIWebView 格式化文本的解决方案之一,允许 html 粗体标签提供所需的标记。如果我错了,请纠正我,但这似乎有点矫枉过正,并且会影响应用程序的性能。
我正在尝试进一步研究的另一个解决方案是创建一个自定义 UITableViewCell,其中包含两个并排的 UILabel,第二个标签格式化为粗体文本。这看起来很简单,但我不确定如何让标签水平自动调整大小以适应文本(达到某个最大宽度)。这可以通过 Interface Builder 实现还是需要以编程方式完成?
我是在正确的轨道上还是有更简单的方法来实现这种看似微不足道的效果?
【问题讨论】:
您对 UIWebView 的看法是正确的 .. 针对下标和上标文本的类似问题进行了尝试。不幸的是,我的解决方案对您不起作用。祝你好运。 cannonade.net/blog.php?id=1467 【参考方案1】:我想知道你是否应该继承 UILabel 并自己绘制。然后您可以使用CGContextSelectFont
、CGContextGetTextPosition
、CGContextSetTextPosition
、CGContextShowText
等来绘制您的文本。
选择普通字体,设置初始文本位置,绘制文本,将文本位置提前几个像素,选择粗体字体,绘制粗体文本,等等。
我自己以前没有这样做过,但我也在考虑将此解决方案用于我的一个应用程序。
【讨论】:
这就是 Apple 的做法(尽管我认为他们使用更高级别的UIStringDrawing
方法)
我最终做到了这一点(使用 UIStringDrawing 方法)并推出了我自己的轻量级 RichTextLabel,允许使用 HTML 标记定义粗体、斜体和带下划线的文本。我在下面提到的 TTStyledTextLabel 解决方案与 Three20 框架的耦合过于紧密,这对我的要求来说太过分了。【参考方案2】:
看起来有人以各种形式在 Stack Overflow 上向few times 提出了这个问题。一个常见的解决方案似乎是 Three20 库的 TTStyledTextLabel。在 iPhone SDK 包含一个内置的富文本标签并且没有滚动我自己之前,这个类看起来是下一个最好的东西。
编辑:刚刚遇到这个解决方案,它看起来更好:https://github.com/chrisdevereux/Slash
【讨论】:
【参考方案3】:enter code here NSDictionary *firstNameAttributes = @ NSFontAttributeName : [UIFont fontWithName:@"Arial" size:20.0],
NSStrokeColorAttributeName : [UIColor blackColor];
NSDictionary *lastNameAttributes = @NSFontAttributeName : [UIFont fontWithName:@"Arial-Bold" size:20.0],
NSStrokeColorAttributeName : [UIColor blackColor];
NSString* first = @"udhaya";
NSString* last = @" chandrika";
NSString *append=[NSString stringWithFormat:@"%@%@",first,last];
cell.textLabel.text = [NSString stringWithFormat:@"%@",append];
NSMutableAttributedString * name =
[[NSMutableAttributedString alloc] initWithString:first attributes:firstNameAttributes];
NSMutableAttributedString * lastName =
[[NSMutableAttributedString alloc] initWithString:last attributes:lastNameAttributes];
[name appendAttributedString:lastName];
[[cell textLabel] setAttributedText:name];
【讨论】:
以上是关于带有部分粗体文本的自定义 UITableViewCell的主要内容,如果未能解决你的问题,请参考以下文章
在自定义UITableViewCell中保持UIImageView的宽高比
是否可以在每 10 行带有“普通”文本的行之后插入一行带有粗体文本的行