如何在具有两个故事板iOS Swift的项目中初始化View Controller

时间:2017-08-23 23:34:16

标签: ios swift xcode

我正在开发一个已main.storyboard的应用,我可以通过选择isInitialViewController来启动应用加载所需的视图控制器,如下所示。

enter image description here

我现在已经为我的项目添加了另一个故事板,名为Customer.Storyboard

我有两个问题。

  1. 我们在代码中的确切地说,必须首先加载main.storyboard

  2. 如何在应用加载时从Customer.storyboard初始化视图(通过选择is initial View Controller中的Customer.Storyboard无效,它会从{{1}加载视图}})?

3 个答案:

答案 0 :(得分:2)

  1. 在您的Info.plist
  2. 从plist中删除main.storyboard加载并更改你的didfinishwithlaunchingoptions func:

    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: 
    
    [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
        self.window = UIWindow(frame: UIScreen.main.bounds)
    let storyboard = UIStoryboard(name: "XXX", bundle: nil)
    
    let initialViewController = storyboard.instantiateViewController(withIdentifier: "LoginSignupVC")
    
    self.window?.rootViewController = initialViewController
    self.window?.makeKeyAndVisible()
    
    return true
    

    }

  3. 在Plist上设置要使用的起始故事板。默认情况下,它是主要的。 **注意:XXX用于表示您要使用的新文件的名称。

答案 1 :(得分:2)

This is a great step by step tutorial about this with best practices.

让故事板变得激烈的干净方式。稍后在本教程中,您将找到一种获取ViewController实例的简洁方法。

enum AppStoryboard : String {
   case Main = "Main"
   case PreLogin = "PreLogin"
   case Timeline = "Timeline"
   var instance : UIStoryboard {
       return UIStoryboard(name: self.rawValue, bundle: Bundle.main)
   }
}

// USAGE :

let storyboard = AppStoryboard.Main.instance

关于您的问题:在项目Plist上设置第一个Storyboard。默认情况下它是主要的。

答案 2 :(得分:1)

您应该知道两个概念:“app的默认界面”和“storyboard的默认场景(视图控制器)”。

“app的默认界面”在Info.plist中设置,请参见下图 default interface for app

“故事板的默认场景(视图控制器)”由isInitialViewController

设置

因此,如果要在Main.storyboard中启动MainViewController,则应将默认界面设置为Main.storyboard

如果您想在Custom.storyboard中初始化CustomViewController,可以将isInitialViewController中的CustomViewController设置为true。

然后,您可以CustomViewController

获取UIStoryboard(name: "Custom", bundle: Bundle.main).instantiateInitialViewController()个实例

如果你想初始化一个不是initialViewController的ViewController,你可以通过UIStoryboard(name: "Custom", bundle: Bundle.main).instantiateViewController(withIdentifier: "yourViewController")获取实例。在此之前,您应该在故事板中设置Storyboard IDStoryboard ID in storyboard file