取消排队的解决方法可重用单元格与标识符



我有一个最初加载一个自定义单元格的表视图。单元格具有用户可以修改的文本字段和段控件。还有一个添加单元格按钮,如果按下该按钮,则会在前一个按钮下方添加另一个自定义单元格。 用户最多可以添加 15 个这些自定义单元格。当前几个单元格最终离开屏幕并创建新单元格时,它们只是创建位于 index.row 位置 0、1、2 等的完全相同的单元格。

例如:用户在自定义单元格的文本字段中输入"测试",位置为 index.row 0。 现在,当该单元格离开屏幕并且用户添加一个新单元格时,它只是添加带有"Test"的textfield.text值的原始单元格以及所有内容。 如果我修改新单元格的 textfield.text 值,比如说"演示",它会将 index.row 位置 0 处的文本字段更改为该值。

现在我知道这就是取消排队ReusableCell的工作方式。它抓取屏幕外的单元格。但是我该如何解决这个问题。并让它每次创建一个唯一的单元格。

*编辑这就是我插入新单元格的方式。

/* create cell and add to array */
NSString *CellIdentifier1 = @"cell";
CustomCell *customCell = (CustomCell*)[self.myTableView dequeueReusableCellWithIdentifier:CellIdentifier1];
/* save cell to array */
[self.fetchCellArray addObject:customCell];
/* Add cell in table */
NSIndexPath *indexPath2 = [NSIndexPath indexPathForRow:deleteInsertIndex inSection:0];
        [self.myTableView insertRowsAtIndexPaths:@[indexPath2] withRowAnimation:UITableViewRowAnimationAutomatic];

您不应该将单元格存储在数组中。您应该将单元格的支持数据存储到数组(或您认为合适的任何其他存储)中,并使用数组中的数据更新已取消排队的单元格。

例如,如果用户添加"Test",您将在索引 0 处将其添加到数组中。现在用户添加"Demo",将其添加到数组中的索引 1 处。现在用户添加越来越多的字符串,你把它们都添加到数组中。一旦用户滚动到顶部,并且要求您为第 0 节第 1 行提供一个单元格,您将取消对单元格(任何单元格)的排队,并根据索引 1 处的数组值设置其标签。就像第 0 节索引 0 处的单元格一样 - 数组将返回"测试"。

我不确定您是否正确地将数据与视图分开。 您应该在每个单元格中都有一个文本条目数组,以便[tableView:(TableView*)tableview cellForRowAtIndexPath:(NSIndexPath*)indexPath]您可以使用存储在数组中的文本填充单元格。 当用户更新某些文本时,您将更新数组。 当您取消对单元格的排队时,假设它是脏的并且已经包含了一些文本,因此请在数组的末尾添加一个新的空字符串条目,并将新单元格的文本设置为空字符串。 仅此而已。

  • 假设所有取消排队的单元格都被回收,因此有关它们的所有内容都需要设置为默认值
  • 将单元格的数据保存在单独的对象(如数组)中,以便您可以使用该索引路径的数据在任何索引路径上设置任何给定单元格。

最新更新