在没有导航控制器的情况下关闭多个模态视图

时间:2011-05-12 15:53:01

标签: objective-c cocoa-touch modalviewcontroller

我没有正确计划我的应用程序中的视图导航,因此用户可以通过一个循环,只是将模态视图叠加在一起,并且从那里只能访问根视图控制器手动解除每个重复视图的耗时过程。

我不能继续使用popToRootViewControllerAnimated:而不使用导航控制器(当时反复调用presetModalViewController:animated:似乎是一个好主意),所以除非Google有什么东西躲避我,我完全迷失了。

重写导航代码的一半并不理想,但如果确实是唯一的选择,我会试一试。
避免这种情况肯定会更可取。

不知道哪些代码会有用,如果有的话。它只是使用UIViewController

的几个子类来呈现/解除模态视图控制器

4 个答案:

答案 0 :(得分:2)

答案答:答案很简单;

只需在您要查看的视图上调用dismissModalViewController:animated:即可。

回答B:真实回答;

您将难以重新考虑作为导航控制器应用程序,我将启动一个新项目,即导航应用程序,并查看应用程序委托中的方法,并模拟该行为。

然后当你正常出现时,只需按下([self.navigationController pushViewController: controller animated: YES]),你的解雇将成为流行音乐([self.navigationController popViewControllerAnimated: YES]

希望有所帮助

答案 1 :(得分:1)

@ Grady的答案都是正确的。查看-dismissModalViewController:animated:的文档告诉您:

  

如果你提出几种模态视图   控制器连续,因此   建立一堆模态视图   控制器,调用此方法   查看控制器在堆栈中较低   驳回其直接的儿童观点   控制器和所有视图控制器   在堆栈上面的那个孩子。什么时候   发生这种情况,只有最顶层的视图   以动画的方式被驳回;   任何中间视图控制器   只是从堆栈中删除。

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

答案 2 :(得分:0)

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

答案 3 :(得分:0)

好的,现在我明白了。线下是我不应该做的。而不是试图包含一个循环增长的堆栈,我应该刚刚开始阻止它。

也就是说,“加载”按钮不再生成另一个视图。相反,它取消了当前视图,它只能是Load视图的子视图,给出了新视图的错觉,并完全消除了不受控制地增长的堆栈的问题。


同样,这是错误的选择:

全局,一些#define'字符串,以及一些if / else堆栈,缺少导航控制器不是问题。

如果有人对我为实现这一目标所做的事情感兴趣(和/或稍后修改会有多大的乐趣),我会将其中的一部分放入此答案中。它并不漂亮,编写起来很痛苦(主要是因为新代码跨越四个文件并且静静地断开),但它完全符合我的要求。