我正在研究基于导航的应用程序,并选择了它,以便我可以在堆栈上和离开堆栈上推送和弹出控制器。向前移动很容易 - 只需推新控制器即可。只要转到根视图控制器,移回就很容易。有一种叫popToViewController:animated,
的方法,但是我没有创建我想从当前视图控制器中弹出的控制器,所以编译器会抱怨我没有声明它。我知道这是堆栈中的第二个控制器(一个在根上)。我可以用它来到那里吗?如何从导航堆栈中的任意位置弹出到任意视图控制器
回答
一个UINavigationController的viewControllers属性在顺序viewControllers,他们推,这样你就可以使用你的这些知识视图控制器是流行这种看法controller..here是一个参考UINavigationController ref
我通常创建一个NavigationController对象,它具有关于我的UINavigationController和我的viewControllers的知识。如果你给每个VC提供一个这样的对象的引用,或者让它成为一个单例,那么它可以为你处理这样的事情。
在视图控制器中嵌入导航逻辑没有任何问题,但是当他们知道每个其他视图控制器时,可能会使他们难以维护。将导航逻辑封装在共享对象中可让您的应用更易于理解和维护。
YMMV
+1我喜欢这听起来如何,但我不知道如何实现它。我确实有一个单例,用于跟踪当前玩家,分数等。它还读取/写入.plists中的数据,如玩家名称。你的'NavigationController'对象与'UINavigationController'不同吗?'当应用程序启动时创建它,然后让它创建所有视图控制器?我很新,我想我有一个想法如何做到这一点,但我需要一些更具体的... – Steve 2010-09-23 18:44:20
我喜欢做的是把它挂在应用程序委托与只读属性。 创建一个NavigationController类并为其提供UINavigationController的字段。添加一个带有UINavigationController的构造函数。在应用程序中:didFinishLaunchingWithOptions:创建NavigationController的一个实例。现在,不要在视图控制器中推送/弹出导航堆栈,而是在NavigationController上创建公共方法来处理此问题。这将允许您从视图控制器中删除相互依赖关系,并更干净地分离您的问题。 – logancautrell 2010-09-23 20:22:56
我最近在大型应用程序中使用的另一种方法是使用通知进行导航。在这种情况下,导航控制器将订阅通知中心并监听导航事件。当用户动作需要导航时,处理视图控制器将获取描述导航事件的通知。通过这样做,我能够从应用程序委托以外的任何地方完全删除导航控制器引用。作为额外的奖励,其他对象可以轻松地订阅导航事件以设置UI状态。 – logancautrell 2010-09-23 20:23:25
- 1. 从导航堆栈弹出视图控制器时从右侧滑入
- 2. 如何从导航控制器中的视图控制器堆栈中获取特定的视图控制器?
- 3. 如何'弹出'到视图控制器不在堆栈上
- 4. 重定向到导航堆栈中的新视图控制器
- 5. 当导航堆栈弹出视图时,如何完成后台任务
- 6. 在哪里设置导航堆栈中的视图控制器导航项目
- 7. 如何从导航控制器的任何视图到达第一个视图?
- 8. 视图控制器如何知道它何时被解散或弹出导航控制器堆栈?
- 9. 弹出视图控制器关闭堆栈没有导航栏显示?
- 10. Android:在任意位置放置视图
- 11. 如何从导航控制器弹出当前视图?
- 12. 将视图控制器推到ipad上的导航控制器堆栈前
- 13. 访问导航堆栈中的当前视图控制器
- 14. 从堆栈中的任何一个视图访问我的导航控制器的最佳方式是什么?
- 15. 尝试从导航堆栈弹出视图时声明失败
- 16. 如何转置(堆栈)Dataframe中的任意列?
- 17. 如何回弹到不同导航控制器中的视图?
- 18. iPhone释放模式视图控制器也弹出推控制器到堆栈?
- 19. 显示已经在导航堆栈上的视图控制器
- 20. 有没有办法找出视图控制器是否从导航堆栈中弹出?
- 21. 不使用导航控制器时弹出视图控制器?
- 22. 在导航控制器中弹出到根视图
- 23. 如何以编程方式导航导航控制器堆栈?
- 24. 如何推视图控制器到导航堆栈后,在执行popToRootViewController
- 25. PHP:从二进制数据的任意偏移位置读取任意位数
- 26. 如何从任何导航堆栈中获取UIViewController
- 27. 将多个视图控制器推入导航控制器堆栈的问题
- 28. 如何将新的视图控制器推到不同的导航控制器堆栈并切换到它?
- 29. 如何在导航视图控制器中关闭整个视图控制器堆栈?
- 30. 从导航栏视图控制器导航到标签栏视图控制器
'[self.navigationController popToViewController:[self.navigationController.viewControllers objectAtIndex:1]动画:NO];'拉去回到根+ 1个控制器。我阅读了'popToViewController:animated'上的文档,但需要返回到'UINavigationController'。谢谢! – Steve 2010-09-23 18:46:04