当您希望在带有TabBarController的应用程序中将LoginViewController呈现为“ModalViewController”时,我正在寻找有关最佳实践方法的反馈。
案例如下: - 应用程序支持具有登录/注销功能的用户会话 - 当应用程序启动时,它会尝试自动登录并直接显示TabBarController或LoginViewController(显示为ModalViewController以在登录时启用解除动画) - 该应用程序有一个带有多个选项卡的TabBarController。 - 每次显示ViewController时,都会检查用户的状态 - 如果用户未登录,则应显示具有登录功能的ModalViewController - 如果用户手动注销,则应显示相同的ModalViewController
我试图提出几种不同的设计来处理这个问题,没有人觉得完全“正确”。我曾经在一个项目中使用子类UIWindow来处理这个项目,UIWindow替换了应用程序默认的UIWindow。然后,子类侦听不同的通知,例如“UserLoggedInSuccessfully”,“UserLoggedOut”等,以处理ModalViewController的呈现。
还有其他解决方案吗?我很感激这种解决方案的任何输入和经验。
答案 0 :(得分:1)
对于这个问题有不同的解决方案,您可以尝试这些替代方案,但首先是我会说的推荐方法,
您可以将HomeViewController
作为默认的TabBarController
的第一个标签,以便每次都打开,并单独制作LoginViewController
,您可以在AppDelegate中查看didFinishLaunchingWithOptions
中的登录会话,如果会话无效,则将LoginViewController
显示为ModalViewController
,否则显示包含所有标签的TabBarController
。
替代方案可能是在“选项卡”中包含所有控制器,但是当您提交LoginViewController
时,在用户登录后,在MutbaleArray
中添加所有控制器并删除当前对象是LoginViewController
。用户登录后,将信息保存在钥匙串中,这样用户就不必再次登录,这样您就可以避免每次显示LoginViewController
,一旦用户尝试注销,然后添加在数组中LoginViewController
,然后在TabBarController
之后添加所有LoginViewController
个对象。
答案 1 :(得分:0)
您可以执行以下操作, 当用户打开应用程序时,你必须显示loginviewcontroller作为rootviewcontroller,然后当登录成功时你必须将tabbarviewcontroller作为rootViewcontroller。 然后,每当用户运行应用程序时,您必须检查他是否有有效的会话,您将制作一个tabar作为根 如果您在标签栏上的会话过期,则必须从您的应用委托更改根视图控制器以登录