从情节提要中实例化专门的 ViewController
Posted
技术标签:
【中文标题】从情节提要中实例化专门的 ViewController【英文标题】:Specialized ViewConrtoller instantiation from storyobard 【发布时间】:2020-03-09 17:09:17 【问题描述】:我有一个这样的 ViewModel 专用 ViewController:
final class MyViewConrtoller<MyViewModel>: UIViewController
var viewModel: MyViewModel?
override func viewDidLoad()
super.viewDidLoad()
我在 InterfaceBuilder 中设置了 ViewController 的类型。 然后我尝试如下实例化它:
guard let myViewController = UIStoryboard(name: "StoryboardName", bundle: nil).instantiateViewController(withIdentifier: "MyViewController") as? MyViewController<MyViewModel> else return
而且看起来演员阵容失败了。确实创建了一个实例(在强制转换之前),但是当它尝试强制转换时,会返回一个 nil。
我有什么遗漏的吗?
编辑:
进一步看,我发现了一个有趣的解决方案,我将尝试。以下是可能需要的人的链接:
Link Storyboard to UIViewController with Generic
【问题讨论】:
【参考方案1】:如果您创建一个如下所示的基类并在 Storyboard 中使用子类会怎么样。
class MyBaseViewController<MyViewModel> : UIViewController
var viewModel: MyViewModel?
final class MyViewConrtoller: MyBaseViewController<MyViewModel>
override func viewDidLoad()
super.viewDidLoad()
现在像这样使用它:
private func LoadMyViewContrller()
guard let myViewController = UIStoryboard(name: "StoryboardName", bundle: nil).instantiateViewController(withIdentifier: "MyViewController") as? MyViewConrtoller else return
myViewController.viewModel = yourViewModel
myViewController.loadView()
【讨论】:
谢谢,我找到了使用虚拟控制器的相同解决方案。我用链接编辑了我的帖子。以上是关于从情节提要中实例化专门的 ViewController的主要内容,如果未能解决你的问题,请参考以下文章
Xcode 11:无法从带有标识符的情节提要中实例化视图控制器
从情节提要“Main”中实例化具有标识符“UIViewController-ZWG-5q-24I”的视图控制器,但没有获得 UITableView。