管理多个单元

斯威夫特3.0

在iOS中,通常在tableView中使用不同类的多个单元格。 由于我们的cellForRowAtIndexPath可能很快变得肿,所以这可能会变得很毛茸茸。 我已经看到开发人员直接使用indexpath确定要出队的单元。 对单元格的索引路径进行硬编码不仅使代码更难阅读,而且也使更改变得更加困难。 我发现的解决方案是使用cellList来管理所有这些。

将单元格限制为枚举

第一步是创建一个枚举,其中包含表视图可以出队的所有可能的单元格。 假设我们的tableView将显示有关使用3个单元格的人的信息。 一个AddressTableViewCell,EmailTableViewCell和PhoneTableViewCell。 然后,我们的枚举将包含三个值,如下所示:

 列举PersonTableIndexPath { 
案例地址
案例电子邮件
手机壳
}

这确保了我们的tableView仅能够使枚举中列出的单元格出队。 如果需要,还可以更新枚举以支持关联的值,但是此示例将保持简单。

使用单元格列表管理单元格

 让cellList:[PersonTableIndexPath] = [.Address,.Email,.Phone] 

我们的cellList本质上是一个枚举数组。 这样,我们将索引路径隐式链接到单元格类。 唯一的好处就是更改枚举在单元格中的位置List将直接与tableView中显示的索引路径相关。 如果已经正确处理了该cellForRow,则无需更改它。

在Table View的数据源中使用单元格列表

在numberOfRowsInSection中,一个衬线就足够了

 返回cellList.count 

在cellForRowAtIndexPath中,我们可以如下使用cellList:

 让cellType = cellList [indexPath.row] 
切换cellType {
案例。地址:
返回setupAddressTableViewCell(indexPath)
案例。电子邮件:
返回setupEmailTableViewCell(indexPath)
手机。
返回setupPhoneTableViewCell(indexPath)
}

我们的设置方法将负责使单元出队,设置和返回。 由于开发人员确切知道单元格设置代码的位置,因此这使代码非常干净。 而且,cellList的魔力还没有结束。 如果我们将cellList更改为可变的,则可以在运行时更改枚举的顺序🙂

在运行时更新单元列表

如果我们需要添加另一个手机单元,我们要做的就是更新单元列表。

  cellList.append(.Phone) 
tableView.reloadData()

am! 真的是这样。 我们的表格视图将显示多余的手机单元作为最后一个单元,而开发人员几乎无需执行任何操作。 单元列表非常强大,因为它可以帮助管理复杂的表视图,尤其是基于状态的表视图。 如果表视图支持部分,则cellList可以成为一个数组数组。 可能性是无止境!