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

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

【问题讨论】:

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

标签: iphone ios ipad uitableview


【解决方案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 循环中的单元格。

      【讨论】:

        猜你喜欢
        • 2015-02-10
        • 1970-01-01
        • 1970-01-01
        • 2011-12-10
        • 1970-01-01
        • 2021-06-23
        • 2012-01-30
        • 2013-01-29
        • 1970-01-01
        相关资源
        最近更新 更多