关于 UIViewController 层次结构和流程的建议

Posted

技术标签:

【中文标题】关于 UIViewController 层次结构和流程的建议【英文标题】:advice on UIViewController hierarchy and flow 【发布时间】:2014-02-28 07:55:19 【问题描述】:

我花了很多时间阅读苹果视图控制器编程,但仍然不知道如何为我的流程编写代码。

我正在使用 ViewController、PageViewController 和 Storyboard。

我的 rootViewController 是一个 ViewController 我想要两个 ViewController

首先,PageViewController 显示教程页面,最后一页已注册 presentViewController 登录 secondViewController,ViewController是app的主要内容

如果用户在钥匙串中有令牌,将转到 secondViewController。 注册或登录后进入 secondViewController

我没有使用导航控制器。想知道这可以通过容器视图控制器来完成吗?

当前问题在 signupViewController self.parentViewController 是 pageViewController 但我无法获取 rootViewController,以关闭并添加 secondViewController

P/S 但在 loginViewController self.presentingViewController 我得到了 rootViewController!出乎我的意料..我想知道为什么???

【问题讨论】:

【参考方案1】:
    在 AppDelegate 中将 secondViewController 设置为 UIWindow 的 rootViewController。 SecondViewController 包含基本视图内容,没有关于登录的数据,因此您可以尽快启动。 如果用户在钥匙串中有令牌,只需更新 SecondViewController 视图的登录状态。 如果用户在钥匙串中没有令牌,则在 SecondViewController 上显示 PageViewController,并显示一个 viewController 或只是 addSubview。在PageViewController之后,出现loginViewController,登录完成后,关闭loginViewController,更新SecondViewController视图,登录状态与步骤2相同

【讨论】:

pageViewController 最后一页正在注册。问题是注册后我无法获取 rootViewController 或关闭 rootViewController。 pageViewController 显示 SignupViewController 不存在或添加子视图。通过委托协议将 ViewController 返回给 pageViewController 在 loginViewController 中,只需执行[self dismissModalViewControllerAnimated:YES]【参考方案2】:

你使用故事板,所以我假设你也会使用 segue。您的 PageViewController 可以作为入口点,与 secondViewController 有一个 segue。

如果您在钥匙串中有令牌,您可以使用以下方式以编程方式执行转场:

[self performSegueWithIdentifier: @"MySegue" sender: self];

否则用户会留在 PageViewController 上以服务其原始流程。

【讨论】:

我创建了从 PageViewController 到 secondViewController 的 segue,但我无法从 SignupViewController 获取我的 pageViewController。因此我也不能在用户触摸按钮后执行 [self.parentViewController performSegueWithIndentifier:@"mySegue" sender:self] 你会改变方向吗?即 secondViewController 作为入口点。如果 keychain 中没有 token,在成功注册后模态页面视图控制器和页面并使用 unwind segue? 不,总是 rootViewController 到 pageView 到 secondView,或者 rootViewController 到 secondView 而已

以上是关于关于 UIViewController 层次结构和流程的建议的主要内容,如果未能解决你的问题,请参考以下文章

尝试在其视图不在窗口层次结构中的 UIViewController 上呈现 UIViewController

尝试在其视图不在窗口层次结构中的 UIViewController 上呈现 UIViewController

尝试在其视图不在窗口层次结构中的 UIViewController 上呈现 UIViewController

尝试在其视图不在窗口层次结构中的 UIViewController 上呈现 UIViewController

使用 UINavigationController 管理 UIViewController 层次结构

UIViewController 的视图层次结构