滚动时 UITableViewCell 图像发生变化

Posted

技术标签:

【中文标题】滚动时 UITableViewCell 图像发生变化【英文标题】:UITableViewCell image changes when scrolling 【发布时间】:2012-08-03 16:20:33 【问题描述】:

我有一个 UITableView,每个单元格上有一个标题和一个图像。一些单元格将具有默认图像,而其他单元格则没有。当我滚动表格时,某些行的图像不是预期的,并且显示另一行的图像而不是预期的图像。如果我不使用 dequeuereuseidentifier 一切正常,但我想使用它,因为我有很多单元格。

有什么建议吗?

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


    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"MyCell"];

    if (cell == nil) 
        cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"MyCell"];

        CGRect titleRect = CGRectMake(60, 6, 200, 24);
        UILabel *title = [[UILabel alloc] initWithFrame: titleRect];
        title.tag = 1;
        title.backgroundColor = [UIColor clearColor];
        title.font = [UIFont fontWithName:@"AdelleBasic-Bold" size:15.5];
        [cell.contentView addSubview:title];

        UIImageView *defaultCellImage = [[UIImageView alloc] initWithFrame:CGRectMake(8, 10, 42, 42)];
        defaultCellImage.tag = 2;
        [defaultCellImage setImage:[UIImage imageNamed: @"Default_Row_Image"]];
        [cell.contentView addSubview:defaultCellImage];
    

    NSUInteger row = [indexPath row];
    Movie *movie = [_movies objectAtIndex: row];

    UILabel *titleRowLabel = (UILabel *) [cell.contentView viewWithTag:1];
    titleRowLabel.text = [movie title];

    UIImageView *cellImage = (UIImageView *) [cell.contentView viewWithTag:2];
    if (![movie.imageName isEqualToString:@""])
        [cellImage setImage:[UIImage imageNamed: [movie imageName]]];

    return cell;

【问题讨论】:

【参考方案1】:

将正确加载表格视图中使用的第一个单元格。由于没有要出列的单元格,if (cell == nil) 将返回 YES 并且您的单元格将其图像设置为默认值。然后,如果您在该方法后面设置不同图像的条件得到满足,则会显示不同的图像。到目前为止,一切顺利。

但是,当一个可重用单元出列时,它已经有一个图像集,这可能不是默认值。由于cell == nil 现在将返回NO,因此该单元格将永远不会将其图像重置为默认图像,即使它是应该显示的图像。

【讨论】:

以上是关于滚动时 UITableViewCell 图像发生变化的主要内容,如果未能解决你的问题,请参考以下文章

带有 UILabel 内容的 UITableViewCell 在滚动时发生变化

滚动时 UITableViewCell 的选定按钮消失

UITableViewCell 图像在上下滚动后发生变化,但 TextLabel 文本保持不变(iOS8,Swift)

在UITableView中滚动时,CustomCell图像会发生变化

自定义 UITableViewCell 图像直到滚动才显示

TableView 滚动时自定义 UITableViewCell 发生变化