在 Swift 中,我应该如何保存自定义视图中的数据,以便在单元格出队时不删除它?

In Swift, how should I save data from a custom view so that it is not deleted when a cell is dequeued?

我有一个自定义视图,它存在于表格视图的单元格中。该视图称为 bulletRow,它是一系列项目符号,当用户点击它们时可以填充或清空。我的表格视图中的每个单元格都包含一些 bulletRows,我需要在用户点击它们时保存它们。我考虑过使用核心数据,但我不需要它们在应用程序关闭时持续存在,我只需要它在用户滚动到出队点时存在。

这是我现在的情况:bulletRows 的默认状态是有 5 个点,它们都是空的。当用户点击它们时,它们就会被填满。但是,如果用户向下滚动,他们将重置为空。如何保存 bulletRows 的状态?

bulletRows 有一个名为 numberOfFilledCircles 的 属性,可以随时设置它以更改圆圈中填充的数量。这也是在 Swift 中完成的。

这里的问题是 UI 不是模型。

当 ui 元素被按下时,您应该向底层模型发送一个动作以更新其状态,当单元格出队时您应该从适当的模型元素恢复复选框状态。

一般来说,你应该使用一些东西,比如数组,来保存你的 table 的状态。 table 中的单元格应反映该状态,并在选中时更新该状态。

您可以从 table 视图控制器中的整数数组开始,如下所示:

var numberOfFilledCircles = [Int]()

通过从 numberOfRowsInSection 方法返回 numberOfFilledCircles.count,使用数组中的项目数来确定要在 table 中显示的行数。

您可以填充 viewDidLoad 中的数组。如果您对行进行硬编码,则可以对任意多行重复此语句:

numberOfFilledCircles.append(0)

数组中的每个Int都保存了表示填充了多少个圆的值(初始化为0)。

在您的 cellForRowAtIndexPath 中,在构建单元格时使用数组中的适当值。例如,如果您的单元格有一个名为 numberOfFilledCirclesUILabel,您可以这样做:

cell.numberOfFilledCircles.text = String(numberOfFilledCircles[indexPath.row])

最后,在您的 didSelectRowAtIndexPath 中,用您要填充的圆圈数更新数组:

numberOfFilledCircles[indexPath.row] = //whatever you want