同时更改所有表格视图单元格

时间:2016-12-15 22:55:00

标签: ios objective-c uitableview

我正在尝试实现一个表视图设计,用户可以单击表视图单元格外的按钮,并且所有按钮的显示模式都应该更改。然而,这不是给定单元的“选定”模式(这将是通过切换到第二状态而变为可访问的第三状态)。实现这个目标的正确方法是什么?

我正在使用dequeueReusableCellWith所以我不想简单地遍历每个单元格,因为一些看不见的东西可能不应该被修改。我只想要任何可见或变得可见的单元格,而表格视图单元格处于第二种显示模式,而不是第一种设计。

目前,第二种设计正在通过我添加到UITableViewCell的子类的方法进行修改,如下所示:

- (void) p_refreshDisplay {
    if (self.editing) {
        self.buttonToClearWidth.constant = 20;
        self.buttonToClearLeadingWidth.constant = 20;
    } else {
        self.buttonToClearWidth.constant = 0;
        self.buttonToClearLeadingWidth.constant = 0;
    }
}

但是,我不确定如何为每个可见(并且变为可见)单元格触发此p_refreshDisplay。多次调用并刷新表视图似乎是不明智的。什么是完成我想做的正确方法?

2 个答案:

答案 0 :(得分:1)

您可以对任何表视图更改执行以下操作:

  1. 根据需要更新您的数据模型或某些标记。
  2. 在表格视图中调用reloadData或调用reloadRowsAtIndexPaths:withRowAnimation:作为要重新加载的行列表传递indexPathsForVisibleRows
  3. 实施cellForRowAtIndexPath以便为给定的数据/标志提供适当的单元格。
  4. 听起来你应该有一个自定义单元类,它有一个或多个属性可以在cellForRowAtIndexPath的单元格上设置,这样单元格就可以根据指定的状态正确渲染自己。

答案 1 :(得分:0)

您可以通过以下三件事来实现这一目标:

  1. 建立一些表明"模式的属性"如果有三个以上的状态,则表格为布尔值或枚举值
  2. 确保cellForRowAtIndexPath根据此属性的值适当配置单元格。这将确保正确配置新显示的单元格。
  3. 当"模式"您可以使用tableview的visibleCells属性更新任何当前可见的单元格:
  4. for cell in tableview.visibleCells {
        if let myCell = cell as? MyCustomCellClass {
            myCell.setButtonStyle()  
        }
    }