我正在使用以下页面流程构建一个应用程序(这是一个很复杂的应用程序,所以我会尽量保持清晰):
登录 - > MainViewController
现在,MainViewController在iOS 5中使用控制器包含来托管两个视图/控制器:
MainViewController
/ \
FirstController SecondController --> DetailsController
从SecondController,我想要转换到一个单独的视图控制器(如果你认为MainViewController是“主”,你可以把它想象成“细节”)。
从SecondController,我可以使用“modal”segue到DetailsController。但当我“回弹”时,iOS会重新加载MainViewController。我不希望它这样做。
如果我使用“push”segue,我会收到运行时错误,说堆栈上没有UINavigationControllers。细
所以接下来尝试的是我试图让MainViewController成为新UINavigationController的根控制器:
Login --> UINavigationController --> DetailsController (but "initiated" by Second)
|
MainViewController
/ \
FirstController SecondController
然后从SecondController,我告诉UINavigationController执行“推送”segue。但我仍然得到相同的运行时错误 - 没有找到UINavigationController。
我一定不明白导航堆栈是如何工作的 - 它可能不会检查调用者,因为我确定我正在调用performSegueWithIdentifier:来自UINavigationController。
我使用“你的第二个iOS应用程序”作为指南,并且他们规定了这种方法(模态segue)。但我真的不想重新加载MainViewController,如果可能的话(它做了一些昂贵的事情)。我更喜欢iOS“缓存”我的视图/控制器/数据。当我加载详细信息页面时,我当然可以编写代码来缓存我的数据,并在我弹回时重新加载缓存而不是重新计算数据,但我希望“推送”segue会自动为我做这个。 / p>
如果你们有任何想法,我将不胜感激。谢谢。
答案 0 :(得分:0)
为了使推送工作,您需要在IB中选择将进行调用的视图,并将其从编辑器菜单嵌入到导航控制器中。
编辑器>嵌入>导航控制器