2015-12-01 81 views
0

想象一下,我有一個BaseViewController。然後我有兩個場景,新建和編輯,其中兩個共享相同的用戶界面和大部分邏輯。所以我創建了類NewViewController和EditViewController,繼承了BaseViewController。問題來了,當我嘗試從故事板實例化「BaseViewController」,因爲我想指定哪個實現。從Storyboard投射到子類

if isEdit { 
    storyboard.instantiateViewControllerWithIdentifier("baseVCIdentifier") as! EditViewController 
} else { 
    storyboard.instantiateViewControllerWithIdentifier("baseVCIdentifier") as! NewViewController 
} 

然後我得到一個錯誤: 無法投型 'Test.BaseViewController' 的值(0x10ee5e0f0)爲 'Test.EditViewController'(0x10ee5f000)。

我不想在故事板上同時擁有ViewController,因爲我不想重做相同的用戶界面2次。

+0

從xib或storyboard加載類時,加載機制將創建文件中指示的類型的類。你不能通過魔法改變類的類型。你應該能夠將實例化的視圖控制器分配給一個子類型的變量,但是我不知道Swift是否足夠了解確切的知識,或者如何編寫演員。 – Avi

+0

如果你可以它仍然不會工作,演員將是一個謊言 – Wain

回答

1

你不能那樣做。而不是分類創建'交互管理器'類或狀態管理器類。然後,基本視圖控制器將作爲segue的一部分提供一個管理器實例,並將所有UI交互轉發給管理器進行處理。然後您可以根據需要在故事板中添加一個VC,並且您可以提供新的或編輯管理器。管理者也可以擁有視圖控制器不關心的特定實例變量。

+0

作爲一種壞蛋的好奇心,有這個.. http://stackoverflow.com/a/41937074/294884 – Fattie