2015-12-01 57 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