【问题标题】:Root view controller issue for a common scenario in iOSiOS 中常见场景的根视图控制器问题
【发布时间】:2013-06-05 06:57:13
【问题描述】:

我希望我的 iOS 应用程序遵循具有主视图的常见模式,在该主视图中需要注册或登录才能访问该应用程序,因此如果这是该应用程序第一次在设备中运行或用户没有登录,即显示的视图,否则显示另一个应用程序视图。主视图中的“注册”和“登录”按钮可以导航到相应的表单,也可以模态显示。一旦用户访问应用程序,它应该是基于标签的,类似于 Twitter 应用程序。

我的问题是:我的rootViewController 应该是什么?如果没有用户凭据,UINavigationController 将主视图推送到哪里,如果有,UITabBarController?或者我应该根据是否有凭据在应用程序委托中动态设置rootViewController?

谢谢

【问题讨论】:

  • 您可以将主 UITabBarController 作为根,并在第一页检查登录凭据。如果他们没有,请显示登录视图控制器模式。
  • @Eric 我需要显示一个带有“登录”和“注册”按钮的主视图,然后是用于请求凭据/用户数据的表单,而不是直接以模态方式显示登录视图跨度>

标签: ios login uiviewcontroller uinavigationcontroller uitabbarcontroller


【解决方案1】:

我推荐第二种解决方案,首先以 root 身份使用登录屏幕,然后在登录时更改 rootViewController。您可以以与模态演示动画相同的方式对其进行动画处理。

【讨论】:

    【解决方案2】:

    在UINavigationController 中嵌入UITabBarController 是违反iOS 设计理念的。我不确定您是否会收到警告或黑屏,但肯定会发生错误。

    rootViewController 之间无需切换。 rootViewController 应该是根,在您的情况下,UITabBarController 使用注册登录表单连接到UINavigationController 或 viewController。如果有凭据,请跳过该视图。

    在根之间切换听起来有点不对劲。如果用户退出怎么办?如果用户有多个帐户并登录和退出怎么办?这是很多不需要的开关。

    根据 Apple 的建议,UITabBarController 应该始终是您应用的根视图控制器。更多有趣的阅读:

    在标签栏界面中嵌入导航控制器时,您 应该只嵌入 UINavigationController 类的实例,并且 不是作为子类的系统视图控制器 UINavigationController 类。虽然系统提供自定义 用于选择联系人、挑选图像和 实现其他行为,这些视图控制器通常是 旨在以模态方式呈现。有关如何使用 特定的视图控制器,请参阅参考文档 类。

    Link

    【讨论】:

    • 那么,如果我将UINavigationController 视为rootViewController 而我不使用t change it even if I already have credentials, Ill 将UITabBarController 嵌入其中...
    • 显然我在两者之间切换。编辑了我的答案。
    • 如果我将UITabBarController 保留为rootViewController,我可以在主视图中显示隐藏标签栏的按钮吗?
    • 当然。您可以随时隐藏TabBar 使其看起来像普通视图。如果您遇到困难,请提出一个新问题。
    • 所以...关键是使用“登录”/“注册按钮”设置主视图,就好像它是其中一个选项卡项的视图,但隐藏了选项卡栏?这比切换rootViewController 更合适吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-10-06
    • 1970-01-01
    • 2016-02-13
    • 1970-01-01
    • 2019-01-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多