滚动后UITableViewCell重复
虽然已经有一些问题已经被问到这个问题,但我似乎无法解决这个问题。 问题是,当我滚动或重新加载我的UITableView时,单元格重复。 我知道问题与重复使用细胞有关。 这是一个出错的截图:
http://imgur.com/JrnERSD
这是我用来自定义单元格外观的代码:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { static NSString *cellID = @"DividendCell"; DividendCell *cell = [tableView dequeueReusableCellWithIdentifier:cellID]; if (cell == nil) { [tableView registerNib:[UINib nibWithNibName:cellID bundle:nil] forCellReuseIdentifier:cellID]; cell = [tableView dequeueReusableCellWithIdentifier:cellID]; } dividend *div = [[[aAgendaItems objectAtIndex:indexPath.section] agendaItems] objectAtIndex:indexPath.row]; [cell setDiv:div]; return cell;
}
我使用Xib作为自定义单元格。
希望有人能帮助我!
编辑:
这是将数据应用于行的setDiv方法的代码:
-(void)setDiv:(dividend *)div { NSString *text = [[NSString alloc] initWithString:[[[div RelatedIssue] ShortName] capitalizedString]]; [issueName setText:text]; [text release]; text = [[NSString alloc] initWithString:[div Description]]; [issueType setText:text]; [text release]; text = [[NSString alloc] initWithString:[div Currency]]; [issueCurrency setText:text]; [text release]; text = [[NSString alloc] initWithString:[super formatDouble:[div BrutValue]]]; [issueKoers setText:text]; [text release]; NSDateFormatter *format = [[NSDateFormatter alloc] init]; NSLocale *loc = [[NSLocale alloc] initWithLocaleIdentifier:@"nl_NL"]; [format setLocale:loc]; [format setDateFormat:@"dd MMM"]; text = [[NSString alloc] initWithString:[format stringFromDate:[div ExDividendDate]]]; [exDividendDate setText:text]; [text release]; NSComparisonResult result = [[div PaymentDate] compare:[NSDate date]]; text = [[NSString alloc] initWithString:[format stringFromDate:[div PaymentDate]]]; if (result==NSOrderedAscending) { [exPaymentDate setTextColor:[UIColor darkGrayColor]]; } else { [exPaymentDate setTextColor:[UIColor blackColor]]; } [exPaymentDate setText:text]; [text release]; [loc release];
}
由于单元格正在被重用,这意味着单元格中的所有子视图也会被重用。 您需要设置或重置最终显示在单元格中的任何内容。
例如,如果您为某些单元格而不是其他单元格设置了UILabel“副标题”,则必须确保[subtitle setText:@""]
如果它是空值或零值,或者[subtitle setText:realValueString]
如果它有合法的价值。 如果不这样做,“旧”单元格中的子视图将继续具有旧值并显示在“新”单元格中。
我设法通过反复试验来解决问题。 解决方案是检查特定标签的“ 属性”检查器中“ 视图” >“ 绘图”下的“ 清除图形上下文 ”复选框。 我注意到这个盒子没有检查相互重叠的标签。 真奇怪的imo。 但很高兴我在疯狂一周后解决了这个问题。