我正在开发一个充当电子邮件客户端的iOS应用程序。我的故事板中的一个视图是一个收件箱,其中显示每个电子邮件:邮件的发件人,对话的标题,邮件正文的开头和日期&消息发送的时间。 (在tableView中) 我还检索消息的状态,如果消息尚未读取(状态= UNREAD),我将这些文本(发送者,标题)以粗体显示,如果读取消息(状态= READ),则以正常样式。 问题是,即使少数消息的状态为READ,它也会设置为粗体。 这是我的代码:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
// Configure Cell
messageTableViewCell *cell = [self.mytableView dequeueReusableCellWithIdentifier:cellidentifier forIndexPath:indexPath];
if (!cell) {
cell = [[messageTableViewCell alloc]initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:cellidentifier];
cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
}
if (tableView == self.searchDisplayController.searchResultsTableView) {
reloadedMessage = [self.results objectAtIndex:indexPath.row];
cell.nom.text = [reloadedMessage valueForKey:@"sentBy"];
cell.titre.text = [reloadedMessage valueForKey:@"messageThreadTitle"];
cell.resume.text = [reloadedMessage valueForKey:@"messageBody"];
cell.date.text = [reloadedMessage valueForKey:@"sentOn"];
} else {
currentMessage = [self.unreadmessagesArray objectAtIndex:indexPath.row];
cell.nom.text = [currentMessage valueForKey:@"sentBy"];
cell.titre.text = [currentMessage valueForKey:@"messageThreadTitle"];
cell.resume.text = [currentMessage valueForKey:@"messageBody"];
cell.date.text = [currentMessage valueForKey:@"sentOn"];
NSString *u = [currentMessage valueForKey:@"status"];
if ([u isEqualToString:@"UNREAD"]) {
[cell.titre setFont:[UIFont boldSystemFontOfSize:15]];
}
}
return cell;
}
`
数据的例子:
{
messageBody = ":-)...";
messageId = 643;
messageThreadId = 529;
messageThreadTitle = "dernier nstimer";
sentBy = "IR Maxim";
sentOn = "2014-10-30 11:40:16";
status = UNREAD;
},
{
messageBody = "le timer...";
messageId = 642;
messageThreadId = 528;
messageThreadTitle = nstimer;
sentBy = "IR Maxim";
sentOn = "2014-10-30 11:30:16";
status = UNREAD;
},
{
messageBody = "gras...";
messageId = 639;
messageThreadId = 525;
messageThreadTitle = "mettre en gras";
sentBy = "IR Maxim";
sentOn = "2014-10-30 11:03:02";
status = SENT;
},
任何人都遇到过这个问题或者想知道问题是什么?
答案 0 :(得分:0)
将字体设置为粗体后,您永远不会将其设置回来。因此,如果重用的单元格恰好有粗体文本,则下次使用文本时它仍然是粗体。添加一个else子句,将字体设置回非粗体。
if ([u isEqualToString:@"UNREAD"]) {
[cell.titre setFont:[UIFont boldSystemFontOfSize:15]];
}
else {
[cell.titre setFont:[UIFont systemFontOfSize:15]];
}
答案 1 :(得分:0)
我认为你的数据来源搞砸了:
你有:
reloadedMessage = [self.results objectAtIndex:indexPath.row];
还有:
currentMessage = [self.unreadmessagesArray objectAtIndex:indexPath.row];
这些不太可能与您要求的indexPath同步。
如果你设置粗体字但没有重置它,你至少应该在单元的prepareForReuse
方法中将字体重置为正常,这是你应该重置所有单元格的地方。 ; s属性为默认值。