【发布时间】:2009-10-28 17:18:01
【问题描述】:
您好!我有一个工作的 iPhone 应用程序(huzzah!),它使用一个 MainView.xib,其中包含一个完整的 UITabBar 和几个 UINavigationController 对象和视图。 p>
现在有人要求我向此组合添加一次性注册视图。此视图将出现在 应用程序启动时的 UITabBar 之前,从用户那里获取一些信息,向服务器注册 - 或检查现有注册,然后将一些数据存储起来在钥匙串中。 (如果钥匙串已经显示了注册证明,那么我们就跳过显示这个特定的视图。)
我已经控制了注册和钥匙串部分(感谢 Erica Sadun 的后者!),但证明最初的一次性视图比我预期的要复杂。
我怀疑我离问题太近了,看不出问题所在。我真的希望这是飞行员的错误,也不需要任何东西 Rube Goldberg!
场景如下:
应用程序首先加载 MainView.xib,其中包含上述 UITabBar 控制器等。人。为了争论,假设我们必须显示注册视图。此外,我们希望它具有模态外观,因此它会从下向上飞入。然后,当我们完成后,我们可以解除它,调用一个委托(很可能是 App Delegate)并告诉它继续原来的 UITabBar。
// Normally, the Tab Bar Controller's view is added to the window ... still do this?
[window addSubview:tabBarController.view];
// We could now set up a VC like so. Mostly harmless. (I know, "mvc" is an unfortunate abbreviation in this case.)
RegistrationVC *mvc = [[RegistrationVC alloc] initWithNibName:@"RegistrationView" bundle:nil];
请注意,RegistrationView.xib 内部有一个 UIView,但没有导航控制器。我们希望将其保持分离,以便可以重复使用它,例如,作为标签栏项目导航控制器的一部分(例如,查看您的注册信息)。
继续前进。我们创建了一个导航控制器,旨在以模态方式呈现事物:
UINavigationController *nc = [[UINavigationController alloc] initWithRootViewController:mvc];
然后我们展示我们的模态VC,使用标签栏控制器作为基础,并释放分配的位。
[tabBarController presentModalViewController:nc animated:YES];
[nc release];
[mvc release];
第一次观察。有人告诉我,这简直是草率。您可以看到第一个标签栏项目的导航栏和视图就像模态视图一样出现。Yeccch!此外,尝试预先将选定的 VC 设置为 nil 无效:
tabBarController.selectedViewController = nil;
在模态 VC 完成之后之前,我们真的不想/不需要使用标签栏(并且当发生这种情况时,我们有委托帮助我们知道)。
为什么我还要使用标签栏?好吧,看来我需要一些东西来挂那个模态VC的帽子,我不知道还有什么可以用的。
这是唯一的方法吗?它似乎只是不必要地束缚了注册 VC 和选项卡栏,而且闻起来……不对。
欢迎/赞赏线索!
【问题讨论】:
标签: iphone uiviewcontroller uitabbarcontroller modal-dialog uiapplicationdelegate