【问题标题】:UITableViewCell dequeueReusableCellWithIdentifier is not in orderUITableViewCell dequeueReusableCellWithIdentifier 不按顺序
【发布时间】:2011-07-04 23:16:35
【问题描述】:

我有一个 UITable,其中包含几个自定义单元格,其中包含文本字段。但是,当向上和向下滚动时,这些单元格的顺序会混乱。

我进行了搜索,但这对我不起作用,因为我几乎没有 UITextFields,我需要在其中获取用户输入。

UITableViewCell showing indexpath rows out of order

谢谢

【问题讨论】:

  • 您应该观看 WWDC 2010 会议 128,掌握表视图。在谷歌上搜索它。问题是表格单元格是可重用的,因为表格中的每一行通常在视觉上是相同的,但内容不同。您需要确保返回的表格单元格包含请求的索引路径的正确数据,而不仅仅是任何行。观看视频以获取更多详细信息和示例代码。

标签: iphone cocoa-touch uitableview iphone-sdk-3.0 ios4


【解决方案1】:

您要么需要为每个单元格使用唯一标识符,要么完全避免使用出队机制。如果您正在执行后者,请将每个单元格的引用存储在相应的实例变量中,或者将它们全部添加到存储在实例变量中的集合中。

如果你决定走这条路,你可以选择以下两种方法之一:或者在 Interface Builder 中创建单元格(这很方便,因为它们已经可以将文本字段嵌套在其中,定位良好等。 ) 并使用插座连接它们,或者在viewDidLoadinit... 方法中以编程方式创建单元。

无论哪种情况,您都不再需要致电dequeueReusableCellWithIdentifier:;相反,您可以只返回您已经创建的单元格实例。

【讨论】:

  • 是的,我必须根据我的要求实现我独特的 dequeueReusableCellWithIdentifier 方式。这解决了问题。感谢您的 cmets。
  • 不客气!那么您最终是否为每个单元格使用了唯一标识符?
【解决方案2】:

这是我的代码。 CustomTextFieldCell 是一个带有 UITextField 的单元格。和一些信息。但是,当您滚动时,填充的值和这些值的顺序会发生变化。

    static NSString *CellIdentifier = @"CustomTextFieldCell";
    CustomTextFieldCell *cell = (CustomTextFieldCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];

    if (cell == nil) {

        NSArray *topLevelObjects = [[NSBundle mainBundle] loadNibNamed:@"CustomTextFieldCell" owner:nil options:nil];


        for (id currentObject in topLevelObjects) {
            if ([currentObject isKindOfClass:[UITableViewCell class]]) {
                cell = (CustomTextFieldCell *) currentObject;
                break;
            }
        }
    }

【讨论】:

  • 请注意——最好通过编辑原始问题来添加补充信息,而不是将其作为答案发布。
  • 感谢您的评论 jLehr
【解决方案3】:

@Dilshan 你可以在你的代码中做类似的事情来实现你想要的。

.
.
.
if(cell == nil)
{
// create your cell in this block of quotes in the cellForRowAtIndexPath: method to avoid making of the cells again, so that your textfield value remain as it is.
.
.
.
//place all the code in this block only.
}
[cell autorelease];
return cell;

对不起,我家里没有 xcode,所以我不能给你任何具体的代码。

但我想你明白了。
干杯。

【讨论】:

  • 感谢您的回复。我做以下。请参阅我的下一篇文章。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-10-09
  • 2018-04-29
  • 2016-03-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多