我有两个故事板,其中一个默认名为 Main ,另一个我刚刚添加的名为管理员。
主要用于客户,管理员用于该应用的所有者。
我想知道如何以编程方式设置初始/主界面故事板。
P.S。我知道如何通过xcode更改它,但不能以编程方式知道。
答案 0 :(得分:12)
您没有以编程方式设置初始故事板。
这是它的工作原理。您可以在主界面下的Xcode中列出主故事板,也可以不:
如果你这样做,那就是最初的故事板,句号。该故事板在启动时自动加载,其初始视图控制器成为窗口的根视图控制器(然后自动显示界面)。
如果不这样做(即主接口字段为空),则 nothing 会自动发生。您可以通过某种方式(可能来自故事板)获取视图控制器,并使其成为窗口的根视图控制器(并显示界面)。
所以,总而言之,一切都是自动发生的,或者没有自动发生。正如您所想象的那样,没有中间状态,您可以通过编程方式更改内容,以便自动加载不同的故事板。
但是,有一种中间状态允许主界面故事板加载但是你忽略它。在application:didFinishLoading...
的实现中,您将有时执行我在第二个项目符号中所说的内容,即加载不同的视图控制器并使其成为根查看控制器。这是有效的,因为我在第一个项目符号点中提到的自动内容在application:didFinishLoading...
被调用时已经已经发生。因此,实际上,您的代码有时会允许自动填充,有时会覆盖它。
在我自己的代码的示例中,我们使用主界面故事板加载初始视图控制器,或者我们自己从故事板加载不同的视图控制器,具体取决于用户默认值中的值:
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
if let rvc = self.window?.rootViewController {
if NSUserDefaults.standardUserDefaults().objectForKey("username") as? String != nil {
self.window!.rootViewController = rvc.storyboard!.instantiateViewControllerWithIdentifier("root")
}
}
return true
}
答案 1 :(得分:1)
您可以在应用程序委托中以编程方式设置情节提要:
window = UIWindow(frame: UIScreen.main.bounds)
// Or "Admin"
window!.rootViewController = UIStoryboard(name: "Main", bundle: nil).instantiateInitialViewController()!
window!.makeKeyAndVisible()
您实际上可以设置任何视图控制器。这就是no-storyboard approach的连接方式。
哦,在代码中执行此操作的另一个优点是延迟了情节提要板的初始化。如果您使用Xcode中的“主界面”设置,则情节提要实际上是在application:didFinishLaunchingWithOptions
方法之前初始化的。