2

我有一个UITabBarController基于应用程序。我想在第一次启动应用程序时启动配置指南 - 一系列视图。这当然与正常的选项卡导航无关,我希望配置视图覆盖整个屏幕。

我有一个支持该UIApplicationDelegate协议的类,我尝试application:didFinishLaunchingWithOptions使用以下代码从该方法启动我的配置视图:

UIViewController *vc = [[self.mainViewController storyboard] instantiateViewControllerWithIdentifier:@"StartupWelcomeViewController"];
[self.mainViewController presentModalViewController:vc animated:YES];

(mainViewController 是对 UITabBarController 的引用)

显然application:didFinishLaunchingWithOptionsviewDidLoad在标签栏视图之前调用的。如果我将上面的代码移动到viewDidLoad它工作后调用的函数。

UIApplicationDelegate我在协议或标签栏视图中UITabBarController的方法之后调用的类中找不到方法。viewDidLoad

哪里是启动我的配置指南的好地方,我该怎么做?

4

1 回答 1

2

(老问题,但为了存档......)

如果您希望启动向导出现在选项卡视图控制器的顶部,那么选项卡视图控制器应该显示它;你会从类似的地方做到这一点viewDidLoad。如果您不喜欢在标签栏控制器中包含该代码,则将其放入例如应用程序委托中,然后让标签栏控制器调用它。

一个可以说是更干净的替代方案是在您的应用程序中没有自动显示的视图,而是从应用程序委托中编排所有内容 - 它检查配置向导是否已运行并选择显示该向导或选项卡栏控制器,因此相关的用户界面。在任何一种情况下,实例化代码都会以您的问题中显示的方式从情节提要中检索相关的命名对象。启动向导将在使用您自己设计的非常简单的委托协议完成后回调应用程序委托,这可能会通过调用相同的 show-tabs 方法为您提供显示选项卡栏所需的提示无论选项卡栏是立即显示还是在配置完成后显示都被调用。

第二种方法确实意味着您的故事板做的工作更少,而您的代码做的工作更多。以我目前的经验来看,随着应用程序的成熟,它的功能开始扩展到自动化情节提要行为提供的相对基本的流程选项之外,这似乎不可避免地会发生。

脚注

  • 当您选择当前用于此目的的任何控制器时,您可以通过关闭 XCode 的故事板编辑器的属性检查器 (Command-Option-4) 中的Is Initial View Controller选项来防止故事板在启动时显示任何视图。它将位于故事板编辑器区域的最左侧,并有一个从左到右“从无到有”的箭头指向它。一旦你这样做了,你会得到一个构建警告,这很烦人;您可能决定添加一个虚拟的空白视图控制器并将其设置为初始视图,纯粹是为了避免警告。
于 2013-05-06T22:33:51.640 回答