2012-10-21 62 views
0

這可能是一個非常基本的問題,但我還找不到答案。 我有一個UITableView作爲我的應用程序的菜單。表格視圖上的每一行在被選中時都會打開UIViewController的一個不同的子類。有沒有更好的方法來從表視圖中加載視圖控制器?

此刻,我的代碼與Apple在UICatlog示例中使用的方式相同。 在主視圖控制器(表視圖)中,每個菜單項在數組(menuList)的字典中描述。每個字典都包含該屏幕的UIViewController子類的實例以及有關菜單項的其他數據。當用戶選擇一行時,didSelectRow atIndexPath開始並調用相應的視圖控制器,該視圖控制器存儲在字典中menuList數組的indexPath.row處。

當表視圖第一次加載時,分配和初始化每個視圖控制器似乎非常浪費。

我的問題是:有沒有比在UICatalog中演示的更好的方式來分配/初始化我的視圖控制器子類只有當相關聯的行被點擊?我知道我可以在didSelectRow中使用一個複雜的if..else結構,但是這會導致一個非常長的didSelectRow方法並破壞封裝。我想知道是否有更簡單的方法來實現這一點,分配和初始化適當的視圖控制器基於字典的數據)

回答

0

雖然我找不到更好的方法來做到這一點,但每個分配的View Controller的內存簽名只有288個字節。由於蘋果建議的解決方案更加優雅和可擴展,因此使用switch case語句,我將它保留原樣。

0

user1349768嘗試使用Storyboard,但此功能僅適用於iOs 4和更高版本。

0

只是一個建議...把一些引用到每個視圖控制器到NSArray中,然後發起並繼續向他們發佈行時(只是從objectAtIndex :)的參考。

+0

謝謝,但我沒有使用故事板。我的應用程序的構建與UICatalog示例代碼類似。 – amirfl

+0

它應該是可能的相同的方式沒有故事板和seque編程或只是推子視圖(不知道確切的方式把絕對可能)。 – ipek

+0

Offcourse我正推着子視圖,那不是問題(參見UICatalog示例代碼)。問題在於,如何在需要時乾淨地分配/初始化正確的視圖控制器子類,而不會創建長而凌亂的didSelectRow方法。 – amirfl

相關問題