dequeueReusableCellWithIdentifier的解决方法

时间:2013-12-16 22:59:23

标签: ios xcode uitableview

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

例如: 用户在index.row位置0的自定义单元格的文本字段中输入“Test”。现在,当该单元格离开屏幕并且用户添加新单元格时,它只是将textfield.text值“Test”添加到原始单元格中。 “ 和所有。如果我修改新单元格的textfield.text值让我们说“Demo”,它会将index.row位置0的文本字段更改为。

现在我知道这是dequeueReusableCell的工作原理。它可以抓取屏幕外的细胞。但是我该如何解决这个问题。并且每次都创造一个独特的细胞。

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

/* 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];

2 个答案:

答案 0 :(得分:2)

您不应将单元格存储在数组中。您应该将单元格的后备数据存储到数组(或您认为合适的任何其他存储)中,并使用数组中的数据更新出列单元格。

例如,如果用户添加“Test”,则会将其添加到索引为0的数组中。现在,用户添加“Demo”,将其添加到数组中的索引1处。现在用户添加了越来越多的字符串,您将它们全部添加到数组中。一旦用户滚动到顶部,并且要求您为第0行第1行提供单元格,您将使单元格出列 - 任何单元格 - 并根据索引1处的数组值设置它的标签。在第0部分索引0 - 数组将返回“Test”。

答案 1 :(得分:0)

我不确定您是否正确地将数据与您的观点分开。您应该在每个单元格中都有一个文本条目数组,这样,在[tableView:(TableView*)tableview cellForRowAtIndexPath:(NSIndexPath*)indexPath]中,您可以使用存储在数组中的文本填充单元格。当用户更新某些文本时,您将更新该阵列。当你使一个单元格出列时,假设它是脏的并且已经有一些文本,所以在数组的末尾添加一个新的空字符串条目,并将新单元格的文本设置为空字符串。这就是它的全部内容。

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