如何设置初始故事板

时间:2017-07-30 21:24:06

标签: ios objective-c xcode xcode-storyboard

我有两个故事板,其中一个默认名为 Main ,另一个我刚刚添加的名为管理员

主要用于客户,管理员用于该应用的所有者。

我想知道如何以编程方式设置初始/主界面故事板。

enter image description here

P.S。我知道如何通过xcode更改它,但不能以编程方式知道。

2 个答案:

答案 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方法之前初始化的。