在我之前的question on UIView animations中,我提到我必须模拟某种视图的模态行为。在这里,我将解释为什么并询问一些更好的解决方案。在应用程序启动时提供登录屏幕
用户应该在我的应用程序中看到的第一个视图是登录屏幕。在成功认证后,程序检查用户是父母还是孩子(在家庭中)。对于这些角色中的每一个,应用都必须提供不同的功能在我的AppDelegate
- 的登录视图控制器申报网点和标签栏控制器(该接口的主要部分):
所以我设计了这样的应用程序。
- 在
application:didFinishLaunchingWithOptions:
方法- 将主窗口到登录视图控制器的
rootViewController
。 - 使AppDelegate登录控制器的委托,以便它可以在完成其工作时发送通知。
- 将主窗口到登录视图控制器的
- 当AppDelegate中接收关于成功登录的消息时,它确定用户是否是父或子,实例化的一组提供相应的功能视图控制器,并将它们传递到标签栏控制器。
- 最后,AppDelegate将主窗口的
rootViewController
切换到标签栏控制器。 - 当然用户可以注销,然后
rootViewController
再次切换回登录控制器。
我想提出并关闭登录屏幕,就好像它是模态的视图,但只的AppDelegate具有裸窗口,因而我没有一个对象发送到presentModalViewController:
。这带来了一个问题:
首先,它是一个很好的设计?
如果是这样,我该如何正确模拟模态行为?
1。总的来说,我同意你答案的第一部分。您已经描述了应用程序委托的用途。但是,当应用程序代理被用于其他目的时(例如,如果您希望成为应用程序控制器),有一些例外情况。将其堆栈放入应用程序委托的Core Data模板。另一方面,视图控制器应该控制其视图。 'startUpController'的视图不过是一个虚拟。因此,我们将在另一个容器视图(窗口)中拥有一个“纯容器”视图。这违反了Occam的剃刀原理。 – adubr 2011-04-19 23:16:06
好吧,许多苹果的示例项目都将逻辑放在了应用程序委托中,但这并没有做到正确。如果您已经构建了任何核心数据应用程序,那么您无疑会发现它在应用程序委托中的尴尬程度。 2.随意分解额外的视图(或用剃刀分开);既然你在问如何模拟一个模态对话框,我得出结论说你并不了解所有的观点,并给了你一个简单的解决方案。 – Rayfleck 2011-04-19 23:50:51
不幸的是我不太了解视图,所以我试图逻辑推理。这样想:如果你没有任何登录屏幕和不同的角色,你会创建一个视图控制器来设置主选项卡栏控制器吗? – adubr 2011-04-21 09:11:25