2010-01-15 33 views
6

我有一個UITableView風格「分組」,我用它來設置我的應用程序中的一些選項。我希望這個UITableView的一個單元格只顯示取決於這個UITableView的另一個單元格是否被激活。如果不是,則應顯示第一個單元格(最好使用平滑動畫),如果是,則應隱藏第一個單元格。根據另一個單元的狀態,我可以顯示/隱藏UITableView中的某個單元嗎?

我試圖在適當的-tableView:cellForRowAtIndexPath:中返回nil來隱藏單元格,但這不起作用,而是拋出異常。

我目前被卡住了,想法如何解決這個問題,所以我希望你們中的一些人能指出我的方向。

回答

9

這裏有一個方便的帖子中,作者提供了一些源代碼,當前選擇的小區上進行動畫:

http://iphonedevelopment.blogspot.com/2010/01/navigation-based-core-data-application.html

他用這在一個NSFetchedResultsController上下文中,但你可以看到他是如何使用各種調用來添加/刪除單元格的。現在

,你的情況,你需要修改你使用主辦用來生成您的tableView行中的任何數據數組時,你「激活」你的細胞,然後有選擇地使用:

  • 的tableView:insertRowsAtIndexPaths:withRowAnimation:
  • 的tableView:deleteRowsAtIndexPaths:withRowAnimation:
  • 的tableView:insertSections:withRowAnimation:
  • 的tableView:deleteSections:withRowAnimation:

相應地調整事情(你可以從tableView:reloadData開始,但效率很低)。

我意識到API可能有點令人生畏,但花時間閱讀並理解各種調用的作用。瞭解UITableView如何使用其數據源和委託以及單元格被選中/刪除/等時發生的事件鏈,如果你想讓事情正確(並且無崩潰),這一點很重要。

+0

+1該鏈接看起來很有趣。 – gerry3 2010-01-15 14:29:13

+0

謝謝,我在你的帖子的幫助下計算出來了! :) – 2010-01-15 16:33:08

9

您應該從表視圖的數據源中移除隱藏單元格後面的數據。

例如,如果您使用的是數組,則當發生導致單元被隱藏的操作時,您將從該數組中刪除該行的對象。然後,作爲表視圖的數據源,該數組將返回一個更少的總數並且僅返回該計數中的每一行的有效單元格(不爲零)。

該方法可能需要保持與所有對象的第二陣列(包括隱藏)。

要更新視圖,請查看reloadRowsAtIndexPaths:withRowAnimation:

+0

謝謝,這也很有幫助。只要我的名聲允許,我會對此贊成。 – 2010-01-15 16:34:19

2
[tableView beginUpdates]; 
[tableView deleteRowsAtIndexPaths:withRowAnimation:]; // or insertRowsAtIndexPaths:withAnimation: 
[tableView endUpdates]; 
+0

正是我所需要的。 – To1ne 2013-08-27 21:10:02

0

在調用cellForRowAtIndexPath之前,調用numberOfRowsInSection。您應該在該部分返回合適的單元格值,因此如果您只想顯示1個單元格,則返回一個單元格。顯示什麼細胞中的邏輯,必須在這兩種方法部分地實現

相關問題