0

我有一个底部有一些选项卡的应用程序(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 的委托功能将事件传播到父视图控制器,但如果可能的话,我想避免这些额外的代码。

4

1 回答 1

0

如果你还没有,我会仔细检查你在那个 nib 中的连接和 NSLog 索引 0 处的 var 类,以确保它是一个 UIView。

我的建议:报废笔尖。如果你不能在代码中做到这一点,为什么还要麻烦呢?我只使用 nib 作为布局工具,从不将它们与二进制文件打包在一起。只需创建 UIView 子类,即可节省时间、内存、代码和存储空间。

至于您的登录屏幕创意问题,当我遇到困难时,我会访问Mobile Design Patterns Gallery寻求灵感。如果您想要更多... -我们应该说专家 - 意见,请访问 SO 的视觉表亲 ux.stackexchange.com

于 2012-05-24T04:30:14.337 回答