自定义单元格中的UITableView隐藏一个按钮也会隐藏其他单元格的下一个按钮

时间:2012-10-31 14:20:25

标签: iphone ios ipad uitableview

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

enter image description here

3 个答案:

答案 0 :(得分:2)

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

对于您的问题,您可以添加一个数组,其中包含指示它们是否隐藏的布尔值,并使用

tableView:cellForRowAtIndexPath:委托方法中读取该数组
cell.hidden = [[self.yourArray objectAtIndex:indexPath.row] boolValue];

在按钮回调方法中,您应该更改hiddenproperty以及更新数组中的值。

答案 1 :(得分:1)

我会按照以下方式进行:

首先你必须跟踪按钮的状态: 的显示的 要么 的隐藏

这是通过将状态保存在 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];
}

答案 2 :(得分:0)

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

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

您还必须记住更新数据源,因此滚动表格会相应地更新单元格而不显示加号按钮。如果您正在更新数据源,那么您可以在上面的for循环中重新加载单元格。