想象一下,我有一个BaseViewController。然后我有2个场景,New和Edit,其中两个场景共享相同的UI和大部分逻辑。所以我创建了类NewViewController和EditViewController,子类化BaseViewController。当我尝试从故事板中实例化“BaseViewController”时会出现问题,因为我想指定哪个实现。
if isEdit {
storyboard.instantiateViewControllerWithIdentifier("baseVCIdentifier") as! EditViewController
} else {
storyboard.instantiateViewControllerWithIdentifier("baseVCIdentifier") as! NewViewController
}
然后我收到一个错误: 无法将“Test.BaseViewController”类型的值(0x10ee5e0f0)转换为“Test.EditViewController”(0x10ee5f000)。
我不想在故事板上同时拥有两个ViewController,因为我不想重做相同的UI 2次。
答案 0 :(得分:1)
你做不到。而不是子类创建“交互管理器”类或状态管理器类。然后,基本视图控制器将被提供作为segue的一部分的管理器实例,并且它将所有UI交互转发给管理器以进行处理。然后根据需要在故事板中有一个VC,您可以提供新的或编辑管理器。管理器还可以具有视图控制器不关心的特定实例变量。