首页 文章

iOS视图层次结构和嵌套的navigationcontrollers

提问于
浏览
2

我在我的应用程序的根目录中有3个viewcontroller / views: LoginViewControllerHomeViewControllerPlayViewcontroller

我正在寻找的是基于状态在这三者之间进行交换的好方法(例如:成功登录会导致loginViewcontroller ping其委托[rootviewcontroller]以移除自身并显示homeviewcontroller)

我似乎有几个选择:

1.RootViewController是一个UIViewController . 它根据需要添加/删除子视图 .

[self.view addSubview:loginViewController.view];

2.RootViewController是一个UIViewController . 它根据需要以模态方式显示/删除视图 .

[self presentViewController:loginViewcontroller animated:NO completion:nil];

3.RootViewController是一个UINavigationController . 它推动/弹出东西 .

[self pushViewcontroller:loginViewController];

我已经读过第一个选项是关于viewcontroller应该是什么的整个想法,因此并不理想 .

第二个选项看起来很奇怪,因为我的整个应用程序是一个模态? viewcontrollers可以在模态呈现的viewcontrollers上进行模态显示吗?

第三个选项看起来最好,(如here所述),但是我的具体实现遇到了一些问题:

  • "navigationController"的比喻并不完全适合(我不是"drilling down into the home controller"登录...)

  • 我是否经常关闭navController的rootviewcontroller?或者我只是在loginvc之上将playvc推送到homevc之上?

  • LoginVC本身就是一个navigationViewController--它推动了vc 's that go through the multi-step process of creating an account, and I can' t推送navcontrollers上的navcontrollers .

所以,我的问题是:

当其中一些是UINavigationControllers本身时,在同等层次结构中构建视图控制器的最佳方法是什么?

****注意:***我已经看了here,但它没有为我的用例(多个导航控制器)提供足够的答案 . *******


EDIT: 我认为这个问题错了,而应该考虑创造我自己的Container ViewController .

3 回答

  • 0

    我认为你应该考虑2和3的组合 . 由于登录是会话中的一次性事情,最好不要让这些控制器一直处于活动状态 - 更好地使用它们,然后让它们消失 . 为此,我将使窗口的根视图控制器成为导航控制器,HomeViewController作为其根,并推送到PlayViewController . LoginViewController应该以模态方式呈现,来自HomeViewController中的viewDidAppear方法,因此它将在应用程序首次打开时显示(如果您关闭了动画) . 可以以模态方式呈现导航控制器,它将覆盖您的根导航控制器,因此您将看不到两个导航栏 .

  • 2

    可以在模态呈现的viewcontrollers之上模态显示viewcontrollers吗?

    是 .

    我不认为你的根控制器是以模态方式呈现的 . 根控制器由应用程序窗口拥有 . 你不能像解雇模态控制器那样解雇它 .

    IMO,只需将您的登录控制器显示为模态视图控制器,并在用户成功通过身份验证后将其关闭 .

  • 2

    我今天遇到了同样的问题,然后我重新构建了一个UITabBarController以理解这一点(UITabBarController是使用Container viewcontroller构建的,包括几个navigationcontroller) . 我刚刚在这里添加了代码https://github.com/damienromito/CustomTabBarController

    关于这个的Apple文档在这里:https://developer.apple.com/library/ios/featuredarticles/ViewControllerPGforiPhoneOS/CreatingCustomContainerViewControllers/CreatingCustomContainerViewControllers.html

相关问题