在代码中使用stroyboard中的ViewController

如果遇到在storyboard中可以正常使用的ViewController,但是用代码中无法正常使用,总是会提示VC中的outlet未初始化,是nil,或者tableview中的cell提示没有注册,那么可以查看本文寻求合理的解决方式

(实训中遇到的问题)

首先持有一个storyboard的对象,假设我们使用的是Main.storyboard

let stb = UIStoryboard.init(name: "Main", bundle: nil)`

中有一个VC叫做MainViewController
那么我们拿到它,使用

let ma = stb.instantiateViewController(withIdentifier: "MainTableViewController")

这个地方一定要注意,这个withIdentifier的参数,填写的是你在storyboard中Storyboard ID属性中填写的内容。

以下是官方API的提示

identifier
An identifier string that uniquely identifies the view controller in the storyboard file. You set the identifier for a given view controller in Interface Builder when configuring the storyboard file. This identifier is not a property of the view controller object itself and is used only by the storyboard file to locate the view controllerIf the specified identifier does not exist (or is nil) in the storyboard file, this method raises an exception.

这样就初始化好了。
追究其深层次的原因,我想是代码初始化一个VC和用storyboard初始化一个VC执行的方法是不一样的。用代码的话是执行它的init()方法,而在storyboard中是awakeFromNib()方法。这两个构造方法的不同,是导致上述现象出现的可能原因。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值