ios - 快速实例化 UIViewController
问题描述
假设我有自定义视图控制器,它们有自己的 .xib 文件设置正确。
我也有这个扩展
class func fromNib<T: UIViewController>() -> T
{
return T(nibName: String(describing: T.self), bundle: nil)
}
让我们调用我们的自定义 UIViewController VC。
let customVC = VC()
let customVC:VC = .fromNib()
前两种方法之间的主要区别是什么?有趣的是,我同时使用了它们,并且都有效,但并非总是如此,也并非对所有人都适用。使用第一种方法,我设法发现,每当您将控制器添加为子级时,它的 loadView 和生命周期就会开始。使用第二种方法,您必须实现以下两件事:
override init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: Bundle?)
required init?(coder aDecoder: NSCoder)
我尝试用第一种方法替换曾经拥有 .fromNib 的所有内容,以便跳过实现上面的那些方法,而只是在 viewDidLoad 中执行所有操作。
为什么第一种方法对某些控制器来说完美无缺,而对另一些控制器来说,插座没有连接?
解决方案
没关系,我发现了这个错误。我在 loadView 中的某些控制器中使用了插座而不是 viewDidLoad,而 loadView 内部的插座为零。我真蠢。PS:第一种方法确实适用于 .xib 文件。我知道从代码到 .xib 文件没有连接,我猜 xcode 只知道您的 ViewController 是 .xib 文件的所有者并自动加载它。
推荐阅读
- python - 在python中提取特殊字符后的数据
- python - 我想计算熊猫数据框中出现的一个子集
- mongodb - 恢复 mongo 数据库,但 mongo shell 不显示它
- javascript - 如何从具有构建器模式的类构造函数返回对象?
- python - 在 Lambda 中使用 Python 请求库时遇到问题
- sql - Oracle 管理历史信息和新条目
- vue.js - VueJS extend component for customization
- c# - 可空启用 T 集合
- redis - 芹菜消费者(仅限)与外部生产者
- python - 如何在 django 中清空多对多字段