如何使用TabBarController在iOS应用程序中呈现ModalViewController?

时间:2013-02-08 22:13:58

标签: ios modalviewcontroller uiwindow

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

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

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

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

2 个答案:

答案 0 :(得分:1)

对于这个问题有不同的解决方案,您可以尝试这些替代方案,但首先是我会说的推荐方法,

  1. 您可以将HomeViewController作为默认的TabBarController的第一个标签,以便每次都打开,并单独制作LoginViewController,您可以在AppDelegate中查看didFinishLaunchingWithOptions中的登录会话,如果会话无效,则将LoginViewController显示为ModalViewController,否则显示包含所有标签的TabBarController

  2. 替代方案可能是在“选项卡”中包含所有控制器,但是当您提交LoginViewController时,在用户登录后,在MutbaleArray中添加所有控制器并删除当前对象是LoginViewController。用户登录后,将信息保存在钥匙串中,这样用户就不必再次登录,这样您就可以避免每次显示LoginViewController,一旦用户尝试注销,然后添加在数组中LoginViewController,然后在TabBarController之后添加所有LoginViewController个对象。

答案 1 :(得分:0)

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