gpt4 book ai didi

ios - 添加到 tableview 单元格的按钮也出现在其他随机单元格上

转载 作者:行者123 更新时间:2023-11-29 12:47:32 24 4
gpt4 key购买 nike

我在向表格 View 单元格添加按钮时遇到问题。基本上,我向特定单元格添加了一个按钮,但该按钮也随机出现在其他单元格上(当前不在 View 中)。

当我点击一个单元格时,我设置了一个变量 (tappedCell=indexPath),然后重新加载该单元格。在我的 cellForRowAtIndexPath 中,我检查 indexPath 是否等于 tappedCell,如果是,我向它添加一个按钮。这行得通,但此按钮还会出现在 tableView 中更下方的其他单元格上。当我点击它们时,这些单元格不在 View 中,而是在更下方,所以我必须滚动才能看到它们。如果我继续(快速)上下滚动,就会出现越来越多带有按钮的单元格。这似乎是完全随机的。

我尝试在添加按钮的 if-statement 中添加一个 NSLog(),但这不会被多次调用(当我点击原始细胞)。所以它实际上并没有添加更多按钮,它必须是出现在多个单元格中的同一个按钮。

我不知道为什么会这样。我已经尝试向每个单元格添加一个按钮,然后将 hidden = YES 设置为标准,当 [self.tappedCell isEqual: indexPath],但这不会改变任何东西......

在这里你可以看到我用来将按钮添加到我的单元格的代码:

UIButton *newBtn=[UIButton buttonWithType:UIButtonTypeCustom];
[newBtn setImage:[UIImage imageNamed:@"open.png"] forState:UIControlStateNormal];
[newBtn setFrame:CGRectMake(220, 0, 100, 86)];
[newBtn addTarget:self action:@selector(openImage:) forControlEvents:UIControlEventTouchUpInside];
[cell.contentView addSubview:newBtn];

我不知道我做错了什么,或者我是否做错了什么。值得一提的是,我使用的是标准 Apple/iOS style=subtitle 单元格,而不是自定义单元格。这是为了在我的应用程序中保持一致(单元格是在 Storyboard 中制作的,我正在重复使用原型(prototype)单元格)。

任何人都可以告诉我为什么它会这样运行,以及我该如何解决它?

提前致谢!

编辑 1:

这是我的cellForRowAtIndexPath 的完整代码:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
// Set up the item
XYZItem *item = [self.itemsInView objectAtIndex:indexPath.row];
NSString *CellIdentifier = @"itemPrototypeCell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];

cell.textLabel.text = item.itemName;

if ([self.selectedItem isEqual:indexPath])
{
cell.textLabel.numberOfLines = 2;

UIButton *newBtn=[UIButton buttonWithType:UIButtonTypeCustom];
[newBtn setImage:[UIImage imageNamed:@"open.png"] forState:UIControlStateNormal];
[newBtn setFrame:CGRectMake(220, 0, 100, 86)];
[newBtn addTarget:self action:@selector(openImage:) forControlEvents:UIControlEventTouchUpInside];

[cell.contentView addSubview:newBtn];
}

NSString *detailTextLabelText = [NSString stringWithFormat:@"%lu subitems", (unsigned long)[item.subItems count]];
cell.detailTextLabel.text = detailTextLabelText;

return cell;
}

最佳答案

该按钮显示在重复使用之前添加它的按钮的单元格上。

这里有几个选项。

  1. 让按钮成为每个单元格的一部分。每次创建/重用一个适当的值时,将它的 .hidden 属性设置为适当的值。
  2. 删除单元格的 prepareForReuse 方法中的按钮。

假设 self.tappedCell 是一个 UITableViewCell 子类并且 indexPath 是一个索引路径,[self.tappedCell isEqual:indexPath] 将始终返回 NO

关于ios - 添加到 tableview 单元格的按钮也出现在其他随机单元格上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23280384/

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