如果我有一个包含名为"ABCViewController"的视图控制器的故事板
"A_ViewController"是"ABCViewController"的子类
是否有一种方法可以将视图控制器"ABCViewController"从故事板中初始化为"A_ViewController"?
这是我的做法,希望能有所帮助。
let abcController = storyboard.instantiateViewControllerWithIdentifier("ABCViewController") as ABCViewController
object_setClass(abcController, A_ViewController.self)
参考故事板,您应该能够将常规转换为基本类型:
let myController = storyboard.instantiateViewControllerWithIdentifier("MyViewController") as UIViewController
别忘了在故事板中为视图控制器设置标识符!
不确定您的问题是什么,假设以下情况之一:
1)您想将故事板视图控制器链接到ABC_ViewController的A_ViewController子类。您可以通过从身份检查器中选择“类”来轻松完成此操作:
2)您已经将视图控制器与Storyboard IdentityInspector中的ABCViewController链接,您想以程序方式获取它并作为A_ViewController类型(子类)。您不能向下转型(从父级到子级),因此您不能执行以下操作(假设sbID1是对应于您的视图控制器的StoryBoard ID):
let storyboard = UIStoryboard(name: "Main", bundle: nil)
let viewController = storyboard.instantiateViewControllerWithIdentifier("sbID1") as A_ViewController
原因是,从继承的角度来看,通常情况下你不能将父类型传递为子类型(反之亦然)。只有在你知道最初实例化对象为子类时,才能将父类向下转换为子类。