2016-12-15 35 views
0

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

我使用的是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每一个可见的(并变得可见)细胞。多次调用并刷新表格视图似乎是不明智的。什么是正确的方式来完成我想要做的事情?

回答

1

你做什么,应该对任何表视图的变化来完成:

  1. 更新您的数据模型或需要一些标志。
  2. 要么在表视图上调用reloadData,要么调用reloadRowsAtIndexPaths:withRowAnimation:传递indexPathsForVisibleRows作为要重新加载的行的列表。
  3. 执行cellForRowAtIndexPath为给定的数据/标志提供适当的单元格。

这听起来像你应该有一个具有可在细胞中cellForRowAtIndexPath可以设置一个或多个属性的自定义单元格类,这样的电池可以使自己正确基于指定的状态。

0

你可以做三件事情做到这一点:

  1. 建立一些属性,指示表的“模式”,一个布尔值或者是一个枚举,如果有三个以上的状态
  2. 确保cellForRowAtIndexPath根据此属性的值适当地配置单元格。这将确保新显示的单元格配置正确。
  3. 当 “模式” 的变化,你可以使用的tableview的visibleCells属性更新任何当前可见的细胞:

for cell in tableview.visibleCells { 
    if let myCell = cell as? MyCustomCellClass { 
     myCell.setButtonStyle() 
    } 
} 
相关问题