自定义UITableViewCells在滚动后重复行

时间:2012-01-07 17:43:27

标签: iphone ios uitableview

我正在寻找解决方案......

代码:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

    NSString *CellIdentifier = @"ItemCardapio";
    NSString *nibName = @"ItemCardapioCell";

    ItemCardapioCell *cell = (ItemCardapioCell *) [self.restaurantsList dequeueReusableCellWithIdentifier:CellIdentifier];

    if (cell == nil) { 
        NSArray *nib = [[NSBundle mainBundle] loadNibNamed:nibName owner:self options:nil]; 
        cell = (ItemCardapioCell *)[nib objectAtIndex:0];

        [cell initCellWithRestaurant:@"" tipoRestaurante:@""];      
    }

    return cell;
}

2 个答案:

答案 0 :(得分:5)

我发现如果细胞重复出现问题,当你把不应该放在if (cell == nil)位的东西时,就会出现问题。

原因是如果您没有适当地更新单元格的某些方面,表格视图将最终使用不正确的重用单元格。

尝试从if (cell == nil)位中取出直接更改单元格的任何内容,并且应该停止重复单元格的问题。

答案 1 :(得分:0)

这是我用于自定义单元格的内容:

static NSString *cellIdentifier = @"ItemCardapioCell";

    ItemCardapioCell *cell = (ItemCardapioCell *) [tableView dequeueReusableCellWithIdentifier:cellIdentifier];
    if (cell == nil) {

        NSLog(@"Creating Cell");

        NSArray *topLevelObjects = [[NSBundle mainBundle] loadNibNamed:@"ItemCardapioCell" owner:nil options:nil];

        for(id currentObject in topLevelObjects)
        {
            if([currentObject isKindOfClass:[ItemCardapioCell class]])
            {
                cell = (ItemCardapioCell *)currentObject;
                break;
            }
        }
    };