通过代码处理视图层次结构

问题描述 投票:1回答:2

如果我有一个UITabBarController (两个选项卡)作为根视图控制器,则在第一个选项卡( FirstTabViewController )中,我用一个根视图控制器AddReminderViewController初始化一个UINavigationController并显示它。

然后在AddReminderViewController内部,我展示了另一个UINavigationController带有一个名为ChooseOptionViewController的根视图控制器,并展示了它。

现在,当我进入ChooseOptionViewController我要以编程方式返回FirstTabViewController ,我该如何尽可能轻松地做到这一点? 我是否需要- dismissViewController...在所有呈现的视图控制器上都- dismissViewController...还是有更简单的方法?

同样在ChooseOptionViewController如何找到提供ChooseOptionViewController的类? 我尝试做[self.presentingViewController class]但这只是说UINavigationController (不是AddReminderViewController

ios objective-c cocoa-touch uinavigationcontroller uitabbarcontroller
2个回答
0
投票

现在,当我进入ChoiceOptionViewController时,我要以编程方式返回FirstTabViewController,我该如何尽可能轻松地做到这一点?

您真的不应该让ChooseOptionViewController尝试独自管理所有这些。 它应该简单地告诉其父项其工作已完成,然后让其解雇。 然后,父级可以告诉其父级其工作已完成,依此类推。 这种方法将使维护代码和在需要时进行更改变得更容易,而不会破坏ChooseOptionViewController。

例如,假设AddReminderViewController希望发生其他事情,例如在提出ChoiceOptionsViewController之后提出ChooseMoreOptionsViewController。 如果AddReminderViewController负责程序部分的流程,那很容易。 如果ChooseOptionsViewController对应用程序的重置有足够的了解,可以完全撤消视图控制器,直到回到FirstTabViewController,则每次流程发生变化时,都必须对其进行修改。 那不是长期成功的秘诀,它增加了许多不必要和无益的复杂性。


0
投票
generally unless an exception you should use only one navigation controller.
keep pushing view controllers onto it.
in that way you can move pop top to root view controller.


for ex:

1
just add one navigation controller to tab 1

2
setrootviewcontroller of navigation controller to FirstTabViewController

3
from FirstTabViewController you can push AddReminderViewController(using the same navigation controller)
ex:- [self.navigationController PushViewController:....];

4
from AddReminderViewController you can push ChooseOptionViewController(using the same navigation controller)
ex:- [self.navigationController PushViewController:....];



5 finally use [self.navigationController popToRootViewController];
© www.soinside.com 2019 - 2024. All rights reserved.