TableView单元格中的NSAttributedString - 有时显示为纯文本

时间:2014-03-04 08:17:05

标签: ios objective-c uitableview nsattributedstring

我的tableview单元格中有一个UITextView。这就是我将NSAttributedString分配给其内容的方式:

- (void)setAttributedMessage:(NSAttributedString *)msg
{
    self.bubbleView.textView.text = nil;
    self.bubbleView.textView.font = nil;
    self.bubbleView.textView.textColor = nil;
    self.bubbleView.textView.textAlignment = NSTextAlignmentLeft;
    self.bubbleView.textView.attributedText = msg;
    self.bubbleView.textView.userInteractionEnabled = NO;
}

我的属性字符串包含一个消息文本和一个较小字体的日期,所以这就是我创建它的方式:

- (NSAttributedString *) attributedTextForRowAtIndexPath:(NSIndexPath *)indexPath
{
    NSString *txt = @"Some text";
    NSMutableAttributedString *a = [[NSMutableAttributedString alloc] initWithString:txt attributes:@{NSFontAttributeName: [UIFont systemFontOfSize:16]}];
    NSDateFormatter *df = [[NSDateFormatter alloc] init];
    df.timeStyle = NSDateFormatterShortStyle;
    df.dateStyle = NSDateFormatterNoStyle;
    NSString *timestamp = [df stringFromDate:[NSDate date]];
    [a appendAttributedString:[[NSAttributedString alloc] 
           initWithString:[NSString stringWithFormat:@"     %@", timestamp]
               attributes:@{NSFontAttributeName: [UIFont italicSystemFontOfSize:10]}]];

    return [[NSAttributedString alloc] initWithAttributedString:a];
}

在显示表视图时,我得到的是纯文本 - 没有更改字体大小或没有带日期的斜体。重新显示单元格虽然可以正常显示。所以,当我将单元格滚出屏幕并将其放回那里时,它就可以了。我还可以重新加载表格视图以强制重新显示,但这个解决方案听起来真的很蹩脚。

知道那里发生了什么吗?

3 个答案:

答案 0 :(得分:1)

你可能不喜欢它,但最好的解决方案实际上是“蹩脚”的解决方案:

[yourTableView reloadData];

这样,将为所有(可见)条目生成新视图,尤其是屏幕上的条目。

答案 1 :(得分:1)

这是我的解决方案: 这会强制标签在下一个操作周期更新(我想它需要在第一个实例中进行某种设置)

[[NSOperationQueue mainQueue] addOperationWithBlock:^{
    [cell.label setAttributedText:cellString];
}];

答案 2 :(得分:0)

我通过在viewDidLoad中设置表数据,然后在viewDidAppear方法内刷新表视图来解决此问题。