按代码操作视图层次结构

时间:2013-05-27 13:48:05

标签: ios objective-c cocoa-touch uinavigationcontroller uitabbarcontroller

如果我有一个UITabBarController(2个选项卡)作为根视图控制器,那么在第一个选项卡(FirstTabViewController)中,我使用根视图控制器UINavigationController初始化AddReminderViewController并呈现它。

然后在AddReminderViewController内,我使用名为UINavigationController的根视图控制器呈现另一个ChooseOptionViewController并显示它。

现在当我在ChooseOptionViewController时,我想以编程方式回到FirstTabViewController我怎样才能尽可能轻松地做到这一点?我是否需要- dismissViewController...在我提供的所有视图控制器上,或者是否有更简单的方法?

同样在ChooseOptionViewController内,我怎样才能找到出现ChooseOptionViewController的班级?我尝试过[self.presentingViewController class],但只是说UINavigationController(不是AddReminderViewController

2 个答案:

答案 0 :(得分:0)

  

现在当我在ChooseOptionViewController里面时我想要   程序上回到FirstTabViewController我该怎么做呢   尽可能容易吗?

你真的不应该让ChooseOptionViewController尝试自己管理所有这些。它应该简单地告诉它的父母它的工作已完成并让父母解雇它。然后,父母可以告诉其父母其工作已完成,依此类推。这种方法可以更轻松地维护代码,并在您决定必要时更改内容,而不会破坏ChooseOptionViewController。

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

答案 1 :(得分: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];
相关问题