2009-10-25 41 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

相關問題