0

当您想在带有 TabBarController 的应用程序中将 LoginViewController 呈现为“ModalViewController”时,我正在寻找有关最佳实践方法的反馈。

情况是这样的: - 应用程序支持具有登录/注销功能的用户会话 - 当应用程序启动时,它会尝试自动登录并直接显示 TabBarController 或 LoginViewController(显示为 ModalViewController 以在登录时启用关闭动画) - 应用程序有一个带有多个选项卡的 TabBarController。- 每次显示 ViewController 时都会检查用户的状态 - 如果用户未登录 ModalViewController,则应显示具有登录功能 - 如果用户手动注销,则应显示相同的 ModalViewController

我试图想出几种不同的设计来处理这个问题,没有人觉得完全“正确”。我曾在一个项目中使用子类 UIWindow 处理此问题,该子类 UIWindow 替换了应用程序的默认 UIWindow。然后子类侦听不同的通知,例如“UserLoggedInSuccessfully”、“UserLoggedOut”等,以处理 ModalViewController 的呈现。

还有其他解决方案吗?我将不胜感激这种解决方案的任何输入和经验。

4

2 回答 2

1

这个问题有不同的解决方案,你可以尝试这些替代方案,但我会说第一个是推荐的方法,

  1. 您可以将默认设置为每次打开HomeViewController的第一个选项卡,并单独设置,在您的 AppDelegate 中,您可以检查登录会话,如果会话无效,则显示,否则显示所有选项卡包括。TabBarControllerLoginViewControllerdidFinishLaunchingWithOptionsLoginViewControllerModalViewControllerTabBarController

  2. 替代方法可能是将所有控制器都放在选项卡中,但是当您呈现时LoginViewController,在用户登录后,将所有控制器添加到 a 中MutbaleArray并删除当前对象,即LoginViewController. 用户登录后,将信息保存在钥匙串中,这样用户就不必一次又一次地登录,这样就可以避免LoginViewController每次用户尝试注销时都显示,然后将其添加到LoginViewController数组中,然后之后添加所有TabBarController对象LoginViewController

于 2013-02-08T22:29:12.160 回答
0

您可以执行以下操作,当用户打开应用程序时,您必须向他显示 loginviewcontroller 作为 rootviewcontroller,然后当登录成功时,您必须将 tabbarviewcontroller 作为 rootViewcontroller。那么每次当用户运行应用程序时,您必须检查他是否有有效的会话,如果会话在您在选项卡栏上过期时,您将作为根创建一个选项卡,您必须从您的应用程序委托更改根视图控制器登录

于 2013-02-08T23:04:09.280 回答