gpt4 book ai didi

ios - UITableViewCell,两个单元格都获得一个附属 View

转载 作者:可可西里 更新时间:2023-11-01 05:38:56 25 4
gpt4 key购买 nike

情况:当用户选择一个单元格时,一个按钮被添加到该单元格。当他们选择一个新单元格时,该按钮将从前一个单元格中删除并添加到新单元格中。这样可行。问题是当更多数据被添加到表中时。所以假设有 20 个单元格,然后我添加另外 20 个单元格。然后我选择第一个单元格,但是按钮被添加到单元格 1 和单元格 21。选择委托(delegate)方法只注册第一个被选中的单元格。

从我的 didSelectRowAtIndexPath 方法:

if (self.selectedCell) {
self.selectedCell.accessoryView = nil;
self.selectedCell = nil;
}

UIButton *downloadButton = [UIButton buttonWithType:UIButtonTypeRoundedRect];
[downloadButton setTitle:@"Download" forState:UIControlStateNormal];
[downloadButton setFrame:CGRectMake(0, 0, 130, 34)];

self.selectedCell = [self.tableView cellForRowAtIndexPath:indexPath];

self.selectedCell.accessoryView = downloadButton;
[self.selectedCell setNeedsDisplay];

在我向表中添加更多数据的方法中,我以以下方式结束:

if(self.selectedCell){
self.selectedCell.accessoryView = nil;
self.selectedCell = nil;
}

[self.tableView reloadData];
[self.tableView setNeedsLayout];

最佳答案

细胞被重复使用。在您的 cellForRowAtIndexPath: 中,您忘记清除 accessoryView。当单元格被重复使用时,accessoryView 出现了。

我喜欢的一种技术是在 tableView:willDisplayCell:forRowAtIndexPath: 中设置 accessoryView。这是在单元格显示在屏幕上之前调用的。然后,您可以执行以下操作:

- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath {
if (cell.isSelected) {
cell.accessoryView = self.downloadButton; // No reason to create a new one every time, right?
}
else {
cell.accessoryView = nil;
}
}

关于ios - UITableViewCell,两个单元格都获得一个附属 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7390866/

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