代码之家  ›  专栏  ›  技术社区  ›  casillas

如何设置初始情节提要

  •  6
  • casillas  · 技术社区  · 7 年前

    我有两个故事板,其中一个叫做默认 我刚刚添加的另一个叫做 管理

    主要的 用于客户, 用于应用程序的所有者。

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

    enter image description here

    P、 我知道如何通过xcode更改它,但不知道编程。

    2 回复  |  直到 7 年前
        1
  •  16
  •   matt    7 年前

    您不会以编程方式设置初始情节提要。

    下面是它的工作原理。要么在主界面下的Xcode中列出了主情节提要,要么没有:

    • 如果没有(即,如果主界面字段为空),则 自动发生。您的代码可以通过某种方式(可能从故事板)获得视图控制器,并将其作为窗口的根视图控制器(并显示界面)。

    总之,要么一切都是自动发生的,要么 没有什么 自动发生。正如您所想象的那样,没有中间状态,您可以通过编程更改内容,从而自动加载不同的故事板。

    但是你忽略了它 .在您实施 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
    }
    
        2
  •  5
  •   samwize    5 年前

    您可以在app delegate中以编程方式设置情节提要,如下所示:

    window = UIWindow(frame: UIScreen.main.bounds)
    // Or "Admin"
    window!.rootViewController = UIStoryboard(name: "Main", bundle: nil).instantiateInitialViewController()! 
    window!.makeKeyAndVisible()
    

    实际上,您可以设置任何视图控制器。这就是为什么 no-storyboard approach

    哦,在代码中这样做的另一个优点是它延迟了故事板初始化。如果您在Xcode中使用“主界面”设置,故事板实际上是在 application:didFinishLaunchingWithOptions 方法