我有一个应用程序, 底部有一些标签( UITabViewCovernor), 大多数标签上部也包含一个工具栏 。
用户需要登录才能访问其中的一个标签 -- 请将其命名为“ 我的账户” 标签。 一旦登录了, 他们就会被显示他们的配置信息, 或者如果他们还没有设置, 那么他们就会被显示一个对话框, 来解释填入其配置文件的好处, 并加上一个大按钮, 上面写着“ 开始 ” 。 这些屏幕中的所有三个屏幕都有底部的标签, 顶部有一个工具栏。 因此, 我所绘制的视图只包含屏幕的中间部分, 因此它们需要作为子视图被装入。 实质上, 我试图显示基于用户当前状态的三种不同子视图中的一种, 在用户显示变化时( 例如当它们登录时), 我需要能够将这些子视图相互切换 。
我最初为这些子视图创建了三个独立的“层 ”, 并且只是用SetHidden在它们之间转换, 但是这在初始化所有三种观点方面有很大的不利之处, 不论使用哪种观点。 当我只是隐藏/ 隐藏它们时, 我也不确定如何激活过渡 。
最理想的情况是,我想创建三个单独的 nib 文件( 每个视图一个), 共享相同的查看控制器( 父控制器), 并根据用户的状态动态装入它们。 所以, 如果用户没有登录, 我会在“ Login” nib 中装入, 然后使用添加的SubView 将其添加到屏幕中。 当用户登录进去时, 我就可以以子视图的形式加载一个其它的 nib, 然后用动画切换子视图 。
我面临的问题是,所有三个子视图都足够简单,所以我只想在顶层视图控制器(“ MyAccountVoctor” )中保留处理按钮点击的逻辑。例如,我希望能够处理同一视图控制器内“login”按钮的点击事件,该控制器负责显示用户的配置信息。我不想为每个子视图创建单独的视图控制器。
这就是我目前正在做的:
- (void)showLoginView {
UIView *loginView = [[[NSBundle mainBundle] loadNibNamed:@"Login" owner:self options:nil] objectAtIndex:0];
[self.view addSubview:loginView];
}
它只是崩溃在 EXC_BAD_ADERDESS 的“ addSubview” 线上。 顺便提一下它的行为方式, 它似乎正在失去记忆, 可能是由于无穷无尽的循环或什么的。 我有一种感觉, 我在这里的解决方案上走投无路了 。
我想做的事是可能的吗?
我还想了解处理登录屏幕的最佳做法。我一直很难找到iPhone 应用程序的最佳工作流程。我过去常写网络应用程序(当然,登录是必要的,这个应用程序被绑在网站上 ) 。
谢谢!
EDIT: 我考虑过为每个子视图 nbs 写入一个单独的查看控制器。 这些查看控制器将在其各自的 nibs 内处理按钮点击, 然后使用客观的 C 代表功能将事件传播到父视图控制器, 但是如果可能的话, 我愿意避免很多额外的代码 。