gpt4 book ai didi

ios - UITableViewCell - 如何在重用前重置内容

转载 作者:可可西里 更新时间:2023-11-01 03:28:01 27 4
gpt4 key购买 nike

有一个烦人的错误,我无法修复。

我有一个 CustomCell,其中我有一个 subview ,它根据对象的值改变它的颜色。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *cellIdentifier = @"CustomCell";

CustomCell *cell = (CustomCell *)[tableView dequeueReusableCellWithIdentifier:cellIdentifier forIndexPath:indexPath];

if (cell == nil) {
cell = [[CustomCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier];
}

MyObject *object = [self.fetchedResultsController objectAtIndexPath:indexPath];

if ([object.redColor isEqualToNumber:[NSNumber numberWithBool:YES]]) {
cell.colorView.backgroundColor = [UIColor redColor];
}
else {
cell.colorView.backgroundColor = [UIColor clearColor];
}

return cell;
}

一切正常,除了当我从 TableView 中删除带有 redColor = YES 的行时,我滚动以显示不可见的行。可见的第一行(重用可重用单元格的第一行)为红色,即使该行是 redColor = NO。如果我再次滚动并隐藏该单元格然后再次显示它,颜色将设置为 clearColor,这是它应该的方式。

我认为这是因为它正在重用刚刚删除的单元格。所以我试图在重新使用之前重置单元格的内容。在 CustomCell.m

- (void)prepareForReuse {
[super prepareForReuse];

self.clearsContextBeforeDrawing = YES;
self.contentView.clearsContextBeforeDrawing = YES;
self.colorView.backgroundColor = [UIColor clearColor];
}

但这行不通。苹果文档说

The table view's delegate in tableView:cellForRowAtIndexPath: should always reset all content when reusing a cell.

重置内容的正确方法是什么?我必须从 super View 中删除 subview 吗?

提前致谢

最佳答案

这似乎可行。

我在 CustomCell.m 中的 prepareForReuse 时删除了单元格的 contentView

- (void)prepareForReuse {
[super prepareForReuse];

// Clear contentView
BOOL hasContentView = [self.subviews containsObject:self.contentView];
if (hasContentView) {
[self.contentView removeFromSuperview];
}
}

cellForRowAtIndexPath中再次添加进去

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

// Cell
static NSString *cellIdentifier = @"CustomCell";

CustomCell *cell = (CustomCell *)[tableView dequeueReusableCellWithIdentifier:cellIdentifier forIndexPath:indexPath];

if (cell == nil) {
cell = [[CustomCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier];
}

// Restore contentView
BOOL hasContentView = [cell.subviews containsObject:cell.contentView];
if (!hasContentView) {
[cell addSubview:cell.contentView];
}

// Configure cell
MyObject *object = [self.fetchedResultsController objectAtIndexPath:indexPath];

if ([object.redColor isEqualToNumber:[NSNumber numberWithBool:YES]]) {
cell.colorView.backgroundColor = [UIColor redColor];
}
else {
cell.colorView.backgroundColor = [UIColor clearColor];
}

return cell;
}

希望这会对某人有所帮助。

关于ios - UITableViewCell - 如何在重用前重置内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31376237/

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