假设我有一个BaseViewController。然后我有两个场景,新建和编辑,两者共享相同的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次。
3条答案
按热度按时间ukdjmx9f1#
您可以使用
instantiateViewController(identifier:creator:)
来完成此操作。我假设您在故事板中有视图控制器,标识符为
template
。故事板中分配给视图控制器的类应该是超类:字符串
这里是documentation
wqlqzqxt2#
就这么简单,只需要将withIdentifier改为identifier即可。
字符串
相反...
型
就这么简单
一个方便的细节:
如果你这么做
型
事实上在现实中你必须这样做
型
你必须把它转换成A**,这样你才能真正使用变量
v.yourStuff = 69
等。所以我们都打了“as!废话”一百万次。
但是,当您使用“identifier”而不是“withIdentifier”时,
型
事实上它已经是正确的类了,你可以不强制转换
v.yourStuffInB = 11
。qf9go6mv3#
你不能这么做。而不是子类创建'交互管理器'类,或状态管理器类。然后,基本视图控制器将被提供一个管理器示例作为分段的一部分,并且它将所有UI交互转发给管理器以进行处理。然后,根据需要,在故事板中有一个VC,并且可以提供一个新的或编辑管理器。管理器也可以有视图控制器不关心的特定示例变量。