gpt4 book ai didi

ios - UITableViewCell willDisplayCell 方法难题

转载 作者:行者123 更新时间:2023-12-01 17:26:21 26 4
gpt4 key购买 nike

每当我创建一个新单元格时,就会出现奇怪的魔法。如果我稍后退出 View Controller (数据全部保存),然后再次返回 View Controller (重新加载数据等),一切都很好(但如果我留在 View Controller 中,它就搞砸了)

现在让我来描述一下这个奇怪的魔法:

  • 我有一个自定义 UITableViewCell
  • 当indexPath为偶数时,里面有一个蓝色圆圈
  • 当indexPath为奇数时,其中存在一个绿色矩形

  • 但是,当创建一个新单元格时,其中既有绿色矩形又有蓝色圆圈,这怎么可能呢?
    - (void)tableView:(UITableView *)tableView willDisplayCell:(CustomCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath {
    if (cell.blueCircle) cell.blueCircle = nil;
    if (cell.greenRect) cell.greenRect = nil;
    if (indexPath.row % 2 == 0){
    NSLog(@"Even indexPath: %@", indexPath);
    //some of the code not shown here creates a blue circle
    [cell addSubview:cell.blueCircle];
    }
    else {
    NSLog(@"Odd indexPath: %@", indexPath);
    //some of the code not shown here creates a green rectangle
    [cell addSubview:cell.greenRect];
    }
    }

    请注意,我只得到一个 NSLog,要么是奇数要么是偶数,那么为什么我会得到两个形状而不是一个呢?

    我有一种感觉,在调用此消息之前,其中一个形状以某种方式(不确定这是如何工作的)从前一个单元格转移到新单元格,但我确实有懒惰的“nilization”来解决这个问题。

    您对此有何看法?

    最佳答案

    因为单元格是从重用队列中拉出的,所以它们不会完全重绘,除非您使用 -setNeedsDisplayInRect: 告诉它们重绘。并传入需要重绘的脏矩形。否则,当您绘制 greenSquare 的矩形时,您需要在 blueCircle 的矩形上绘制,反之亦然。

    我相信发生的事情是过去绘制的绿色方 block ,单元格在滚动到屏幕外后被添加到重用队列中,然后从重用队列中拉出单元格以填充新数据,然后发生蓝色圆圈要在当前 channel 上绘制,但绘制绿色方 block 的矩形从未失效和重绘。

    关于ios - UITableViewCell willDisplayCell 方法难题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15996028/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com