Iphone 带有部分粗体文本的自定义UITableViewCell

Iphone 带有部分粗体文本的自定义UITableViewCell,iphone,uitableview,uilabel,Iphone,Uitableview,Uilabel,尝试实现一个类似内置联系人iPhone应用程序的UITableView名称,其中名字为普通字体,姓氏为粗体。一个快速的谷歌表明,这并不像听起来那么容易,因为iPhone SDK在UILabels中缺乏富文本支持 找到的解决方案之一建议使用UIWebView格式化文本,允许HTML粗体标记提供所需的标记。如果我错了,请纠正我,但这似乎有些过分,会影响应用程序的性能 另一种解决方案是创建一个自定义UITableViewCell,其中包含两个UILabel,第二个标签的格式为粗体文本。这看起来很简单,

尝试实现一个类似内置联系人iPhone应用程序的UITableView名称,其中名字为普通字体,姓氏为粗体。一个快速的谷歌表明,这并不像听起来那么容易,因为iPhone SDK在UILabels中缺乏富文本支持

找到的解决方案之一建议使用UIWebView格式化文本,允许HTML粗体标记提供所需的标记。如果我错了,请纠正我,但这似乎有些过分,会影响应用程序的性能

另一种解决方案是创建一个自定义UITableViewCell,其中包含两个UILabel,第二个标签的格式为粗体文本。这看起来很简单,但我不确定如何让标签自动水平调整大小以适应文本(最大宽度)。这是通过接口生成器实现的还是需要通过编程实现的


我在这方面做得对吗?还是有更简单的方法来实现这个看似微不足道的效果?

我想知道您是否应该将UILabel子类化并自己绘制。然后您可以使用
CGContextSelectFont
CGContextGetTextPosition
CGContextSetTextPosition
CGContextShowText
等来绘制文本

选择普通字体,设置初始文本位置,绘制文本,将文本位置提前几个像素,选择粗体字体,绘制粗体文本,等等


我自己以前没有这样做过,但我也在考虑将此解决方案用于我的一个应用程序。

看起来这是一个以各种形式出现的堆栈溢出问题。一个常见的解决方案似乎是Three20库的TTStyledTextLabel。在iPhoneSDK包含一个内置的富文本标签,并且没有推出我自己的富文本标签之前,这个类看起来是下一个最好的东西


编辑:刚刚遇到这个解决方案,它看起来更好:

您对UIWebView的看法是正确的。。针对下标和上标文本的类似问题尝试了此方法。不幸的是,我的解决方案不适合你。祝你好运苹果就是这样做的(尽管我认为他们使用了更高级的
UIStringDrawing
方法),我最终做到了这一点(使用UIStringDrawing方法),并推出了自己的轻量级RichTextLabel,允许使用HTML标记定义粗体、斜体和下划线文本。我在下面提到的TTStyledTextLabel解决方案与Three20框架的耦合过于紧密,对于我所需要的东西来说,这是过分的。
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];