我正在尝试实现一个表视图设计,用户可以单击表视图单元格外的按钮,并且所有按钮的显示模式都应该更改。然而,这不是给定单元的“选定”模式(这将是通过切换到第二状态而变为可访问的第三状态)。实现这个目标的正确方法是什么?
我正在使用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
。多次调用并刷新表视图似乎是不明智的。什么是完成我想做的正确方法?
答案 0 :(得分:1)
您可以对任何表视图更改执行以下操作:
reloadData
或调用reloadRowsAtIndexPaths:withRowAnimation:
作为要重新加载的行列表传递indexPathsForVisibleRows
。cellForRowAtIndexPath
以便为给定的数据/标志提供适当的单元格。听起来你应该有一个自定义单元类,它有一个或多个属性可以在cellForRowAtIndexPath
的单元格上设置,这样单元格就可以根据指定的状态正确渲染自己。
答案 1 :(得分:0)
您可以通过以下三件事来实现这一目标:
cellForRowAtIndexPath
根据此属性的值适当配置单元格。这将确保正确配置新显示的单元格。visibleCells
属性更新任何当前可见的单元格:
for cell in tableview.visibleCells {
if let myCell = cell as? MyCustomCellClass {
myCell.setButtonStyle()
}
}