2011-05-12 82 views
3

我没有为我的应用中的视图导航提前做好计划,因此用户可以通过一个循环来叠加模态视图,然后从那里开始只能通过手动关闭每个重复视图的耗时过程来访问根视图控制器。在没有导航控制器的情况下关闭多个模态视图

我不能继续前进,并且在没有导航控制器的情况下使用popToRootViewControllerAnimated:(当时称为presetModalViewController:animated:似乎是个好主意),所以除非Google隐瞒我的某些事情,否则我是完全失去了。

重写导航代码的一半并不理想,但如果这真的是唯一的选择,我会给它一个镜头。
避免这一点肯定会更好。

不知道什么代码会有帮助,如果有的话。这只是提出/解雇模态视图控制器与几个小类UIViewController

回答

0

好吧,现在我明白了。线下是我永远不应该做的。而不是试图包含循环堆栈,我应该刚刚阻止它。

也就是说,“加载”按钮不再生成另一个视图。相反,它忽略了当前的视图,它只能是Load视图的子视图,给人一种新视图的幻觉,并完全消除了不可控增长堆栈的问题。


再次,这是错误的选项:

一个全球性的,少数#define倒是字符串,以及一些的if/else堆栈,以及缺乏一个导航控制器是没有问题的。

如果有人对我所做的事情感兴趣(和/或稍后修改多少乐趣),我会将其中的一些内容放入此答案中。这并不美妙,编写起来很痛苦(主要是因为新代码跨越了四个文件并且安静地打破),但它确实是我想要的。

+0

这并不重要,但我投入了一些内容以允许用户决定是否应该对动画进行转换。如果BOOL设置为NO,则不会显示current和root之间的视图。如果使用动画:YES,那么看起来会更好,唯一的过渡是从顶部到根部,而不是在二分之一秒之间显示两者之间的每个视图。我会看看我能做什么。 – Thromordyn 2011-05-13 16:19:39

+0

划痕。现在不可能在堆栈中有超过4个视图(包括root),所以关闭特定转换的动画并不是太麻烦。 – Thromordyn 2011-05-16 15:45:34

0

更改视图属性在你的UIViewController不起作用?

+0

我不认为我明白你的意思。 – Thromordyn 2011-05-12 15:59:46

2

答:答:简单的答案;

只需拨打dismissModalViewController:animated:就可以看到您想要查看的内容。

答案B:真正的答案;

要重新导入导航控制器应用程序并不困难,我会启动一个新的导航应用程序项目,并查看应用程序委托中的方法并模拟该行为。

那么当你通常会存在,只是推([self.navigationController pushViewController: controller animated: YES])和你的解雇将成为流行([self.navigationController popViewControllerAnimated: YES]

希望帮助

+0

正如我所说,有一个循环,但我不想删除有问题的按钮(从它的视图中),因为它会混淆用户界面,并为用户造成不便。我试图采取简单的方式,而不是实施一个适当的导航控制器......(主要是因为IB对改变这样的事情很烦恼。)无论如何,我会看看我能做些什么,至少直到(或者说,除非)有人提出我最初希望的解决方案。 – Thromordyn 2011-05-12 16:06:23

+0

IB不关心导航栏,如果它被设置,它只是出于布局的原因,你可以使用导航控制器而不显示导航栏。您可以使用底部的工具栏或视图中间的按钮,导航控制器不会在意。 – 2011-05-12 17:33:35

+0

导航控制器在经过一番思考后肯定听起来是最好的选择,但我不确定如何去实现它。我明天会看看我能找到什么。 – Thromordyn 2011-05-12 21:34:32

1

两个@格雷迪的答案是正确的。一看为-dismissModalViewController:animated:的文档讲述了:

如果本几个模态视图 控制器在连续,并因此 构建一个堆模态视图 控制器,调用 视图控制器这种方法在较低的堆栈 取消了其在子堆栈上方的其直接子视图 控制器和所有视图控制器 。当 发生这种情况时,只有最上面的视图 以动画形式被解雇; 任何中间视图控制器 只是从堆栈中删除。

您应该使用-dismiss ...而不是从导航堆栈中弹出控制器,因为模式控制器甚至可能不是导航堆栈的一部分。不过,如果你发现你的应用应该是一个基于导航的应用,那么花点时间来完成它。如果这是很多工作,那么可能无论如何都需要完成工作。

相关问题