当可重用的UITableViewCell出列时,归因字符串字体格式会发生变化

时间:2016-10-15 19:50:02

标签: ios objective-c uitableview nsattributedstring

我有一个UITableView,其中包含我在NSAttributedString设置UILabel的单元格。 NSAttributedString包含使用<b>%@</b> by <b>%@</b>以粗体显示的部分,并且它们在第一次传递时正确呈现,但是当再次调用该单元格时,整个字符串以粗体显示,而不是单个部分。

我使用此功能准备NSAttributedString

- (NSAttributedString *)attributedStringForString:(NSString *)string forFont:(UIFont *)font {
    NSLog(@"Get attributed string");
    string = [string stringByAppendingString:[NSString stringWithFormat:@"<style>body{font-family: '%@'; font-size:%fpx; color:#000000;}</style>",
                                              font.fontName,
                                              font.pointSize]];

    NSDictionary *options = @{NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType};
    NSAttributedString *labelString = [[NSAttributedString alloc] initWithData:[string dataUsingEncoding:NSUTF8StringEncoding] options:options documentAttributes:nil error:nil];

    return labelString;
}

1 个答案:

答案 0 :(得分:2)

有几种方法可以解决这个问题:

1)

在自定义UITableViewCell中,您应该实现prepareForReuse

-(void)prepareForReuse{
    [super prepareForReuse];

    // Then Reset here back to default values that you want.
    self.label.font = [UIFont systemFontOfSize: 12.0f];
}

2)

cellForRowAtIndexPath方法中将表格视图单元格出列后,您可以执行以下操作:

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cell"];
if(cell)
{
    cell.textLabel.font = [UIFont systemFontOfSize: 12.0f];
}