我有一个底部有一些选项卡的应用程序(UITabViewController),大多数选项卡还包括顶部的工具栏。
用户需要登录才能访问其中一个选项卡——我们称之为“我的帐户”选项卡。登录后,他们将看到他们的个人资料信息,或者如果他们还没有设置,那么他们将看到一个对话框,解释填写个人资料的好处以及一个大按钮,上面写着“开始”。所有这三个屏幕的底部都有选项卡,顶部有一个工具栏。所以我制作的视图只占据屏幕的中间部分——因此它们需要作为子视图加载。本质上,我试图根据用户的当前状态显示三个不同的子视图之一,并且每当用户的状态发生变化时(例如他们登录时),我需要能够相互切换这些子视图。
我最初为这些子视图创建了三个单独的“层”,并且只是使用 setHidden 在它们之间切换,但这有一个很大的缺点,那就是初始化所有 3 个视图,而不管正在使用哪些视图。当我只是隐藏/取消隐藏它们时,我也不确定如何为过渡设置动画。
理想情况下,我想创建三个单独的 nib 文件(每个视图一个),它们共享相同的视图控制器(父控制器),并根据用户的状态动态加载它们。因此,如果用户未登录,我将加载“登录”笔尖,然后使用 addSubView 将其添加到屏幕。当用户登录时,我可以将其他笔尖之一加载为子视图,然后使用动画来切换子视图。
我遇到的问题是所有三个子视图都很简单,我只想将处理按钮点击的逻辑保留在顶级视图控制器(“MyAccountViewController”)中。例如,我希望能够在负责显示用户个人资料信息的同一视图控制器中处理“登录”按钮的单击事件。我不想为每个子视图创建一个单独的视图控制器。
这就是我目前正在做的事情:
- (void)showLoginView {
UIView *loginView = [[[NSBundle mainBundle] loadNibNamed:@"Login" owner:self options:nil] objectAtIndex:0];
[self.view addSubview:loginView];
}
它只是在带有 EXC_BAD_ADDRESS 的“addSubview”行上崩溃。顺便说一句,它似乎内存不足,可能是由于无限循环或其他原因。我有一种感觉,我对这里的解决方案很不满意。
我正在尝试做的事情可能吗?
我也有兴趣了解处理登录屏幕的任何最佳实践。我在找出 iPhone 应用程序的最佳工作流程时遇到了很多麻烦。我习惯于编写网络应用程序(是的,登录是必要的——这个应用程序与一个网站相关联)。
谢谢!
编辑:我考虑为每个子视图笔尖编写一个单独的视图控制器。这些视图控制器将处理它们各自的 nib 中的按钮单击,然后使用 Objective-C 的委托功能将事件传播到父视图控制器,但如果可能的话,我想避免这些额外的代码。