2009-10-25 69 views
2

我有一个iPhone如何在表格中重复使用单元格的问题。问题是类的实现方法也会“重用”,并且一个单元格中的更改会应用到其他被重用的单元格。我有一个进度指示器,应该只在用户交互后的一个单元格中更新,但进度指示器更新并且方法也在第6个单元格内运行。它也发生在第2和第7格。多个自定义UITableViewCells - ReuseIdentifier和不重复使用单元格

我知道内存不能重用任何单元是不好的,但在这个应用程序中永远不会超过7个单元。

CustomTableCell *cell = [tableView dequeueReusableCellWithIdentifier:nil]; 

不起作用。如果我滚动一秒钟并返回,Cell将恢复正常,并且发生的所有更新都将重置。我想,这个细胞已经自我毁灭,并被再次吸引。

我需要知道是否有一种快速,无痛的方法可以让iPhone只是单独绘制每个单元而不用重复使用任何单元。有没有办法可能使用快速迭代或for循环为dataSource中的每一行创建单独的单元格?

请让我重申,我不会在给定viewController的一个表中拥有超过7或8个单元格。

回答

0

终于为我工作的是编程方式做布局。使用TableViewCells的界面生成器只是越野车。创建一个TableViewCell类和带有大量CGRects和框架属性的layoutSubviews方法是它的工作原理。即使单元格被重用,内部实际的数据也不会被覆盖。

2

如果你真的想这样做......在7或8长的viewDidLoad中设置一个数组。做一个[[UITableView alloc] initWithStyle:UITabeViewCellStyle… reuseIdentifier:@"whatever"] 7或8次,然后在cellForRowAtIndexPath,从数组中返回单元格。您应该确保释放dealloc方法中的单元格数组。

+0

我想我忘了说我从nib文件加载这些单元格。我在iCodeBlog上找到了一个很好的教程。细胞真的是自定义的,并有相当多的信息。要使用你的方法,我需要在代码中layoutSubviews。我明天再试,现在我真的很累。 – Justin 2009-10-25 06:12:00

+0

你不必做layoutSubviews。唯一的区别是你不是在demad上创建它们,而是提前创建它们。 cellForRowAtIndexPath只是要求你返回一个单元格,而这正是你正在做的。 – coneybeare 2009-10-25 12:41:11

+0

您可能不会字面上调用initWithStyle:reuseIdentifier:初始化程序。您将以与dequeueReusableCellWithIdentifier:返回nil相同的方式分配单元格。但重点是,*不*调用dequeueReusableCellWithIdentifier :. – 2009-10-25 15:17:58

0

如果您只使用7行 - reuseIdentifyer是无用的。它是如何工作的?想象一下,你正在向下滚动许多行的一些表格。有一段时间,其中一行被隐藏,另一行将被显示。只有这样,表才能通过重用cellidentifyer获取单元格。它不会为另一个单元分配内存。它需要隐藏行并将其用于显示新行。对不起,我的英语)

+0

但是,如果我将reuseIdentifer更改为nil,则表格每次在表格滚动时绘制一个单元格,以便在向下滚动然后备份时覆盖顶部的单元格,覆盖该过程中的所有单元格更新。 – Justin 2009-10-25 15:47:10

+0

如果您只有7行,则根本不可使用reuseIdentifyer。 – Morion 2009-10-25 16:22:28