如何将我的项目从使用情节提要过渡到不再使用?

时间:2019-03-07 20:11:12

标签: ios cocoa-touch uistoryboard

如果我有一个已经使用Storyboard的Xcode项目,现在我想切换为以编程方式加载视图控制器,该怎么做?

2 个答案:

答案 0 :(得分:0)

这里是一个in-depth article。 TLDR是:

  1. 在项目设置中,清除主界面:

enter image description here

  1. 在您的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的回答所指出的那样,顶层场景有些特殊。您可以更改或不更改其他场景。