2012-09-30 30 views
1

我建立一个应用程序与下面的页面流(这是一个很大的复杂,所以我会尽量尽可能明确):如何获得推塞格斯,遏制控制器,和故事一起工作

登录 - > MainViewController

现在,MainViewController使用控制器围堵在iOS 5中举办两个视图/控制器:

MainViewController 
    /    \ 
FirstController SecondController --> DetailsController 

从SecondController,我想原因请看单独视图控制器(你可以把它看成“详细信息“如果你认为MainViewController为”m紫苑“)。

从SecondController,我可以继续使用“模态”segue到DetailsController。但是当我“回弹”时,iOS会重新加载MainViewController。我不希望它那样做。

如果我使用“推”segue,我得到一个运行时错误,说在栈上没有UINavigationControllers。精细。

那么我想接下来是我试图让MainViewController一个新的UINavigationController的根控制器:

Login --> UINavigationController --> DetailsController (but "initiated" by Second) 
        | 
      MainViewController 
      /    \ 
     FirstController SecondController 

然后再从SecondController,我告诉UINavigationController的执行“推” SEGUE。但我仍然得到相同的运行时错误 - 找不到UINavigationController。

我不明白导航堆栈是如何工作的 - 它可能没有检查调用者,因为我确定我正在调用performSegueWithIdentifier:来自UINavigationController。

我在使用“你的第二个iOS应用程序”作为指导,并且他们开了这个方法(modal segue)。但我真的不想重新加载MainViewController,如果可能的话(它正在做一些昂贵的事情)。我宁愿iOS“缓存”我的视图/控制器/数据。我当然可以在加载详细信息页时编写代码来缓存我的数据,并重新加载缓存,而不是在我弹出时重新计算数据,但我希望“推”继续会自动为我执行此操作。

如果你们有任何想法,我将不胜感激。谢谢。

+0

当你说“回弹”,你实际上使用popViewController:animated:?你有没有试过从DetailsController [self.presentingViewController dismissModalViewControllerAnimated:]回到SecondController? – rdelmar

+0

对不起 - 这就是我的意思是“回弹” - dismissModalViewControllerAnimated :.它强制“父”视图重新加载。 – tng

回答

0

为了推送起作用,您需要选择IB中的视图,这个视图会在编辑器菜单中进行调用并将其嵌入到导航控制器中。

编辑>嵌入>导航控制器

+0

嗨 - 我试过了。我做了一个SecondNavigationController,它被设置为根控制器SecondController。我主MainViewController使用SecondNavigationController(并验证它,因为导航栏开始显示)。但是在尝试使用SecondController的push segue时,我仍然得到相同的异常。 – tng

+0

我也检查过SecondController.navigationController是非NULL,这意味着它应该被正确托管。我不知道为什么我仍然使用push segue获得异常。 – tng

相关问题