2009-12-31 47 views
2

我創建了一個UITableViewController子類。我只需要一個控制器?我只是實例化這個子類的多個實例嗎?如何在iPhone鑽取應用程序中處理無限量的TableViews

我正在構建的iPhone應用程序將以一張人員列表開始。如果用戶點擊一個人,一張新表將被推入他們工作的公司列表。如果用戶點擊一個公司,他們會看到一份工作職位列表。如果他們挖掘一個職位,他們會看到持有這些職位的人員名單。 這可以永遠持續下去,用戶可以隨時備份列表。

應用程序委託實例化導航控制器和表視圖控制器,然後將其推送到導航控制器上。但是當用戶點擊一行時,現在TVC正在創建另一個TVC。

  1. 那是正確的還是應該 AppDelegate中被實例化所有 TVC的?或者它是否自 起作用?它們都被推入Nav 控制器嗎?

  2. 是否每個表視圖實例 需要有不同的名稱,也可以 他們都被稱爲「mainTVC」或 類似的東西?

    tableViewController *mainTVC = [[tableViewController alloc] init]; 
    
  3. 我不會耗盡內存嗎?我是否需要 下降表視圖 當他們從 當前2或3級別,然後重新創建它,如果 用戶備份到它?

回答

1

我會爲每種類型創建一個視圖控制器。據推測,你會希望有一個特殊的顯示特性,如自定義的tableview單元顯示工作位置略有不同,那麼你會得到人的名字。

除此之外,@Ben Gottlieb的答案應該工作得很好。使用大量的視圖控制器並處理didReceiveMemoryWarning:方法。

還有一件事,如果用戶向下鑽取以至於你想說他們永遠不會回頭(有點像撤銷堆棧),那麼可以使用setViewControllers:animated:UINavigationController方法將堆棧重置爲一定的大小(比如15來實現15的「撤消緩衝區」)。使用這種方法,您可以確保第一個視圖控制器始終是您的根視圖控制器,其餘的都是向下鑽取實例。

3

無需創建多個TableView,我過去所做的只是重新綁定到不同的數據源。因此,保持一個TableView,併爲人們,然後公司等數據源...

+0

謝謝。但是,我可以做到這一點,仍然動畫 - 從右側滑入新數據? – Andrew 2009-12-31 04:16:28

+0

你可以做的只是從一個tableView開始。當用戶導航到一個新的數據源時,只需替換表的數據源 - 但是,而不是用[myTableView reloadData]重新加載,使用(對於每個部分): [aTableView reloadSections:[NSIndexSet indexSetWithIndex:0/* * ] withRowAnimation:UITableViewRowAnimationRight]; – pop850 2010-07-19 21:45:40

1

選項號碼(2)看起來不錯。在內存成爲問題之前,您可以將相當多的視圖控制器推入堆棧。系統將清除didReceiveMemoryWarning:方法中的大部分重量級內存(即視圖)。如果你正在創建大量的內存結構,你可能需要在那個方法中清理它們(一定要調用繼承的方法)。

1

要回答你的第三個問題,只要你在內存中沒有龐大的數據存儲,內存不應該是一個問題。你不應該在任何情況下「放棄」tableview - 這會導致崩潰(無論如何,無法對導航堆棧進行非FILO添加/移除)。在內存壓力下,你應該只釋放像緩存這樣的「不重要」項目。但是,這不應該是一個問題。

此外,如果您的級別超過3個左右,則可能需要重新考慮您的用戶界面。如果用戶正在向下鑽取10個等級,那麼導航堆棧將非常繁瑣。

相關問題