如果我有一个已经使用Storyboard的Xcode项目,现在我想切换为以编程方式加载视图控制器,该怎么做?
答案 0 :(得分:0)
这里是一个in-depth article。 TLDR是:
在您的didFinishLaunching
中使用如下代码:
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
window = UIWindow(frame: UIScreen.main.bounds)
let homeViewController = UIViewController()
homeViewController.view.backgroundColor = UIColor.red
window!.rootViewController = homeViewController
window!.makeKeyAndVisible()
return true
}
答案 1 :(得分:0)
慢慢地。一次只一步。
故事板并非全有或全无。您可以继续在适用的地方使用情节提要,对于无法使用的地方可以使用编程加载,并且一次可以在它们之间进行过渡。
如果要从情节提要中解开片段,第一步是删除导入到情节提要中的序列,然后以编程方式从情节提要中使用instantiateViewController(withIdentifier:)
加载该视图控制器。
然后,您可以将给定场景拉到其自己的单独的Storyboard中(选择场景,编辑器,重构到Storyboard ...),以使其完全独立于所有其他场景。然后,您可以将该一个视图控制器重新编写为程序代码,而无需中断项目中的任何其他操作。您也可以在这里混合搭配;从情节提要中加载视图控制器,但在init(nibName:bundle:)
中手动处理初始化。
您还可以将情节提要视图剪切并粘贴到其自己的XIB文件中,有时可以更轻松地使用它,而无需放弃GUI布局系统。选择视图,复制,创建一个新的XIB文件(在模板中称为“视图”),然后将其粘贴。与init(nibName:bundle:)
一起使用会更容易。
但是关键点是不要尝试一次重做整个项目。如果在某些情况下情节提要板引起问题,请将其重构。如果您只是更喜欢编程式代码,那么就一次一次重构一个步骤,直到完成操作或完成足以使您满意的操作为止。
正如Senseful的回答所指出的那样,顶层场景有些特殊。您可以更改或不更改其他场景。