如何设置初始情节提要
Posted
技术标签:
【中文标题】如何设置初始情节提要【英文标题】:How to set initial storyboard 【发布时间】:2017-07-30 21:24:05 【问题描述】:我有两个故事板,其中一个默认称为 Main,而我刚刚添加的另一个故事板称为 Admin。
Main 用于客户,Admin 用于应用所有者。
我想知道您如何以编程方式设置初始/主界面故事板。
附:我知道如何通过 xcode 更改它,但不知道如何编程。
【问题讨论】:
【参考方案1】:您没有以编程方式设置初始情节提要。
这是它的工作原理。要么你在 Xcode 的 Main Interface 下列出了一个主故事板,要么你没有:
如果你这样做,那就是最初的故事板,句号。该故事板在启动时自动加载,其初始视图控制器成为窗口的根视图控制器(然后自动显示界面)。
如果您不这样做(也就是说,如果主界面字段为空),则 什么都不会发生 自动发生。由您的代码以某种方式(可能从情节提要)获取视图控制器,并使其成为窗口的根视图控制器(并显示界面)。
所以,总而言之,要么一切都自动发生,要么什么都没有自动发生。正如您似乎想象的那样,没有中间状态,您可以在其中以编程方式更改内容,以便自动加载不同的故事板。
但是,有一种中间状态,您允许主界面故事板加载但随后您忽略它。在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
【讨论】:
我不知道为什么有人不赞成你的回答。无论如何,我刚刚投了赞成票,阅读了您的回答。 对不起,我不小心投了反对票,但我想投赞成票。 ?? @hotspring 此外,您可能会发现此问题中的代码示例很有帮助:***.com/questions/10428629/… 能否请您说明如何通过代码设置? @AaronBrager,我已经看到了这个答案,在管理员故事板中,已经选择了初始viewcontroller
。为什么我们仍然需要将该视图控制器分配为rootviewcontroller
?【参考方案2】:
您可以在应用委托中像这样以编程方式设置情节提要:
window = UIWindow(frame: UIScreen.main.bounds)
// Or "Admin"
window!.rootViewController = UIStoryboard(name: "Main", bundle: nil).instantiateInitialViewController()!
window!.makeKeyAndVisible()
您实际上可以设置任何视图控制器。这就是no-storyboard approach 的连接方式。
哦,在代码中这样做的另一个好处是它延迟了故事板的初始化。如果您在 Xcode 中使用“主界面”设置,情节提要实际上是在 application:didFinishLaunchingWithOptions
方法之前初始化的。
【讨论】:
(无关)谢谢。由于添加了更多 Storyboard,我的应用程序无法启动,因为window
变量为零。添加window = UIWindow(frame: UIScreen.main.bounds)
解决了这个问题。以上是关于如何设置初始情节提要的主要内容,如果未能解决你的问题,请参考以下文章
如何通过 managedObjectContext 使用情节提要来初始化下一个控制器
带有情节提要的 viewController 自定义初始化方法
如何以编程方式从情节提要中填充静态 UITableView?