我的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];
}
在显示表视图时,我得到的是纯文本 - 没有更改字体大小或没有带日期的斜体。重新显示单元格虽然可以正常显示。所以,当我将单元格滚出屏幕并将其放回那里时,它就可以了。我还可以重新加载表格视图以强制重新显示,但这个解决方案听起来真的很蹩脚。
知道那里发生了什么吗?
答案 0 :(得分:1)
你可能不喜欢它,但最好的解决方案实际上是“蹩脚”的解决方案:
[yourTableView reloadData];
这样,将为所有(可见)条目生成新视图,尤其是屏幕上的条目。
答案 1 :(得分:1)
这是我的解决方案: 这会强制标签在下一个操作周期更新(我想它需要在第一个实例中进行某种设置)
[[NSOperationQueue mainQueue] addOperationWithBlock:^{
[cell.label setAttributedText:cellString];
}];
答案 2 :(得分:0)
我通过在viewDidLoad
中设置表数据,然后在viewDidAppear
方法内刷新表视图来解决此问题。