swift - Xcode 从 Storyboard 迁移
问题描述
我有一个使用情节提要的 Xcode 项目。
我有典型的设置,
- 故事板中的转场
- 从视图控制器调用 self.perform("..."....)
- 然后调用'prepare(for segue:UIStoryboardSegue,sender:Any?)'允许我在调用'viewdidload'之前在新视图控制器中写入变量
现在,该项目正在发展,使得使用故事板变得不切实际。我们正在采用代码方法从代码中加载视图。我们面临的问题是如何在调用“viewdidload”之前将数据传递给新视图,或者使用什么正确的过程。
我们正在使用加载视图
let nib = UINib(nibName: "TestView", bundle: nil)
let view = nib.instantiate(withOwner: self, options: nil).first as! TestViewController
view.delegate = self
view.dataModel = TestViewDataModel()
present(view, animated: true, completion: nil)
我们遇到的问题是“实例化”调用 viewdidload 但理想情况下它需要来自“数据模型”的数据
谢谢
解决方案
添加一个新的初始化程序TestViewController
,接受您需要的任何数据作为参数。
从其中调用super.init(nibName: "TestView", bundle: nil)
. UIViewController
的初始化程序将负责查找 nib,从中实例化自身,并将自身设置为所有者。
class TestViewController: UIViewController {
let dataModel: TestViewDataModel
init(dataModel: TestViewDataModel) {
super.init(nibName: "TestView", bundle: nil)
self.dataModel = dataModel
}
//...
}
推荐阅读
- angular - 在 initializeBindings 期间尝试使用 UpgradeComponent 会导致 TypeError
- python - 有没有更好的方法来利用 redshift、python 和 powershell 来自动化我的报告?
- r - 锁定屏幕后如何在linux中运行ar代码?
- java - 如何截取屏幕截图,然后单击硒中保存的屏幕截图?
- sql-server - 如何更新表中的多个记录以从列中删除第二个单词?
- node.js - nodejs:在 http.createServer 关闭时释放资源
- python - 根据存储在 csv 中的地点/商店名称和城市检索完整地址和地理编码
- c - 从程序集调用 printf 的访问冲突
- visual-studio - 解锁某些不再在公司的员工锁定的文件和文件夹
- excel - 在代码段上出现“Argument not optional”错误