假设我有一个 BaseViewController。然后我有 2 个场景,New 和 Edit,它们共享相同的 UI 和大部分逻辑。所以我创建了类 NewViewController 和 EditViewController,继承了 BaseViewController。当我尝试从 Storyboard 中实例化“BaseViewController”时出现问题,因为我想指定是哪个实现。
if isEdit {
storyboard.instantiateViewControllerWithIdentifier("baseVCIdentifier") as! EditViewController
} else {
storyboard.instantiateViewControllerWithIdentifier("baseVCIdentifier") as! NewViewController
}
然后我得到一个错误: 无法将类型“Test.BaseViewController”(0x10ee5e0f0)的值转换为“Test.EditViewController”(0x10ee5f000)。
我不想在 Storyboard上同时使用两个 ViewController,因为我不想重做相同的 UI 2 次。
最佳答案
您可以使用instantiateViewController(identifier:creator:)
来完成此操作。
我假设您的 Storyboard中有 View Controller ,其标识符为template
。分配给 Storyboard中 View Controller 的类应该是父类(super class):
let storyboard = UIStoryboard(name: "main", bundle: nil)
let viewController = storyboard.instantiateViewController(identifier: "template") { coder in
// this passes us with a coder for the storyboard, we can now init the preferred subclass.
if useSubclass {
return SpecialViewController(coder: coder)
} else {
return BaseViewController(coder: coder)
}
}
关于ios - 从 Storyboard 转换到子类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34016755/