滚动后UITableViewCell会重复

时间:2014-07-16 13:37:45

标签: ios objective-c uitableview

虽然已经有一些问题已经被问到这个问题,但我似乎无法解决这个问题。问题是,当我滚动或重新加载我的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];

}

2 个答案:

答案 0 :(得分:4)

因为正在重复使用单元格,这意味着单元格中的所有子视图也会被重用。您需要设置或重置最终显示在单元格中的任何内容。

例如,如果你有一个UILabel"副标题"对于某些单元格而不是其他单元格,您必须确保[subtitle setText:@""]如果它是空值或零值,或[subtitle setText:realValueString]如果它具有合法值。如果你不这样做,那么来自" old"的子视图。单元格将继续具有它的旧价值,并显示在您的" new"细胞

答案 1 :(得分:0)

我设法通过试用和解决问题来解决问题。错误。解决方案是检查 View >下的复选框清除图形上下文属性检查器中的绘图,用于指定特定标签。我注意到这个盒子没有检查相互重叠的标签。真奇怪的imo。但很高兴我在疯狂一周后修好了它。