customCell 中的 UITableView 隐藏一个按钮也隐藏其他单元格的下一个按钮

Posted

技术标签:

【中文标题】customCell 中的 UITableView 隐藏一个按钮也隐藏其他单元格的下一个按钮【英文标题】:UITableView in customCell hiding one button also hide the next button of other cells 【发布时间】:2012-10-31 14:20:24 【问题描述】:

例如,当您正在观看带有加号按钮的单元格的 tableView 时,当我按下该按钮时,它会隐藏当前按钮,但是当我滚动 tableview 时,其他 customCells 上的其他一些按钮也会被隐藏,但我没有隐藏它们。请帮帮我。如何解决这个问题。

【问题讨论】:

您采取了哪些措施来解决这个问题?另外,请发布您的-tableView:cellForRowAtIndexPath: 方法的内容。在我的脑海中,这听起来可能与重复使用排队表单元格有关。 【参考方案1】:

UITableView 正在缓存单元格,这意味着它不会始终存储所有单元格,这在内存方面非常出色。它的问题是,当单元被重用时,它没有引用存储在该单元中的值。通常的做法是,存储在动态单元格中的所有值都存储在单独的 NSMutableArrays 中。

对于您的问题,您可以添加一个带有布尔值的数组,指示它们是否隐藏,并在 tableView:cellForRowAtIndexPath: 委托方法中使用

cell.hidden = [[self.yourArray objectAtIndex:indexPath.row] boolValue];

并且在按钮回调方法中,您应该更改 hidden 属性以及更新数组中的值。

【讨论】:

【参考方案2】:

我会这样做:

首先您必须跟踪按钮的状态: 显示 或者 隐藏

这是通过将状态保存在 NSMutableArray

中来完成的

viewDidLoad 方法中添加以下内容

NSMutableArray *shownButtons = [[NSMutableArray alloc] init];

然后在您的tableView:cellForRowAtIndexPath 中执行以下操作

NSString *tmpIndexPathString = [NSString stringWithFormat:@"%d",indexPath.row];
if ([shownButtons containsObject:tmpIndexPathString])

    [cell.myButton setHidden:YES];

else

    [cell.myButton setHidden:NO];

【讨论】:

【参考方案3】:

tableView:cellForRowAtIndexPath: 委托方法中,您需要遍历所有可见单元格:

for (UITableViewCell *cell in [self.tableView visibleCells]) 
    // now you have a cell that you can update

您还必须记住更新您的数据源,以便滚动表格将相应地更新单元格并且不显示加号按钮。例如,如果您要更新数据源,您可以重新加载上述 for 循环中的单元格。

【讨论】:

以上是关于customCell 中的 UITableView 隐藏一个按钮也隐藏其他单元格的下一个按钮的主要内容,如果未能解决你的问题,请参考以下文章

UITableView 无法从 CustomCell 重新加载数据

UIScrollView+UIView 而不是 UITableView+customcells?

CustomCell 标签值更改时如何更新 UITableView?

UITableView 在运行时切换到不同的 CustomCells

改变 UITableView Customcell 的高度

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