虽然已经有一些问题已经被问到这个问题,但我似乎无法解决这个问题。问题是,当我滚动或重新加载我的UITableView时,单元格重复。我知道问题与重复使用细胞有关。这是一个错误的屏幕截图:
这是我用来自定义单元格外观的代码:
- (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];
}
答案 0 :(得分:4)
因为正在重复使用单元格,这意味着单元格中的所有子视图也会被重用。您需要设置或重置最终显示在单元格中的任何内容。
例如,如果你有一个UILabel"副标题"对于某些单元格而不是其他单元格,您必须确保[subtitle setText:@""]
如果它是空值或零值,或[subtitle setText:realValueString]
如果它具有合法值。如果你不这样做,那么来自" old"的子视图。单元格将继续具有它的旧价值,并显示在您的" new"细胞
答案 1 :(得分:0)
我设法通过试用和解决问题来解决问题。错误。解决方案是检查 View >下的复选框清除图形上下文。 属性检查器中的绘图,用于指定特定标签。我注意到这个盒子没有检查相互重叠的标签。真奇怪的imo。但很高兴我在疯狂一周后修好了它。