2012-02-18 51 views
0

我有一個程序在UISplitView中創建UIViewControllers,具體取決於在UITableView中選擇哪一行。例如,如果用戶點擊名爲'settings'的行,程序將創建一個名爲settingsTableVC(它顯示在UISplitViewController的左側窗格中)的視圖控制器和一個名爲settingsDetailVC的詳細視圖控制器,該控制器顯示在右側窗格中。如何在創建後更改ViewController的類型?

這個邏輯工作正常,但是我在初始tableView中有很多代碼用於創建和設置每個ViewController及其公共屬性,而且在我看來,更簡單的方法是定義兩個通用ViewControllers,然後將它們轉換爲方法中正確的類型。這樣,我可以一般地定義它們的公共屬性(因爲它們基本上都是相同的屬性,指向masterViewController和tableViewController的指針)。

UIViewController *leftController = nil; 
UIViewController *rightController = nil;' 

然後,在didSelectRowAtIndexPath方法:

leftController = [[SettingTableViewController alloc]init]; 
rightController = [[SettingsDetailViewController alloc]init]; 

leftController.masterVC = self; 
rightController.tableVC = leftController; 

然而,編譯警告 - '的UIViewController不聲明屬性masterVC'。

如何在運行時更改這些ViewController的類?

回答

0

您可以執行下列操作:

SettingsTableViewController *leftControllerCasted = (SettingsTableViewController *)leftController; 
SettingsDetailViewController *rightControllerCasted = (SettingsDetailViewController *)rightController; 
leftControllerCasted.masterVC = self; 
rightControllerCasted.tableVC = leftController; // Doesn't matter if you assign it to leftController or leftControllerCasted 

((SettingsTableViewController *)leftController).masterVC = self; 
((SettingsDetailViewController *)rightController).tableVC = leftController; 

你已經正確創建你的對象,但你爲他們分配UIViewController指針對象類型的編譯器不知道你的對象是你的自定義類。

+0

完美,我看不到看,非常感謝。 – Skybird 2012-02-19 08:28:14

+0

很高興我能幫忙:) – jrtc27 2012-02-19 10:22:33

相關問題