【问题标题】:Workaround for dequeueReusableCellWithIdentifierdequeueReusableCellWithIdentifier 的解决方法
【发布时间】:2013-12-16 22:59:23
【问题描述】:

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

例如: 用户在 index.row 位置 0 的自定义单元格的文本字段中输入“Test”。现在,当该单元格离开屏幕并且用户添加一个新单元格时,它只是添加具有“Test”的 textfield.text 值的原始单元格“ 和所有。如果我将新单元格的 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];

【问题讨论】:

  • 为什么需要创建一个唯一的单元格?当您向上滚动时,您将再次出列单元格并将正确的文本放入其中。
  • 您将数据存储在哪里?将它存储在一个数组中,然后当你出列一个单元格时,只需从数组中获取字符串并将单元格的标签设置为该字符串。

标签: ios xcode uitableview


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-06-01
      • 1970-01-01
      • 2011-02-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多