#ios #objective-c #uitableview #nsattributedstring
#iOS #цель-c #uitableview #nsатрибутируемая строка
Вопрос:
У меня есть a UITableView
, который содержит ячейки, в которых я устанавливаю a NSAttributedString
на a UILabel
. В NSAttributedString
нем есть разделы, выделенные жирным шрифтом в формате HTML <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:
Есть несколько способов решить эту проблему:
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];
}
Комментарии:
1. Отлично, спасибо, по какой-то причине по умолчанию автоматически возвращается к системному шрифту размера 17, но это легко обойти.