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?