问候!我有一个工作的 iPhone 应用程序(huzzah!),它使用一个MainView.xib
包含一个库存充足的UITabBar以及几个UINavigationController对象和视图。
我现在被要求为这个组合添加一个一次性注册视图。此视图将出现在应用程序启动时的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 和标签栏,而且它只是闻起来......错了。
欢迎/赞赏线索!