0

问候!我有一个工作的 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 和标签栏,而且它只是闻起来......错了。

欢迎/赞赏线索!

4

1 回答 1

1

如果不知道您的 Default.png 显示什么,很难回答这个问题。假设您正在关注 HIG 并且它显示一个空的 tabBarController,我建议进行一些复杂的分层:底部视图:tabBarController.view 中间视图:UIImageView:Default.png 顶部视图:位于屏幕底部下方的注册视图

在启动时,如果您需要显示注册视图,请手动将其向上设置动画,并在动画完成后移除其下方的 UIImageView。注册完成后,手动将注册视图向下动画以显示 tabBarController。如果在启动时不需要注册视图,只需将 UIImageView 动画化为淡出(或将其删除)。

OTOH 手,如果您不关注 HIG 而是显示某种闪屏,事情会变得容易一些。像这样的层:底视图:tabBarController.view 顶视图:UIImageView:Default.png

如果您需要显示注册,请使用动画:NO 执行 presentModalViewController,然后淡出 UIImageView。如果没有,只需淡出 UIImageView。

这是一个没有图片的冗长解释,希望它有意义。重点是我建议添加一个 UIImageView:Default.png 作为应用程序启动时看到的第一件事,并使用它来指导您过渡到注册或 tabBarController 视情况而定。

于 2009-10-28T20:09:36.177 回答