如何使Push Segues,Containment控制器和故事板协同工作

时间:2012-09-30 15:42:42

标签: objective-c ios

我正在使用以下页面流程构建一个应用程序(这是一个很复杂的应用程序,所以我会尽量保持清晰):

登录 - > 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>

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

1 个答案:

答案 0 :(得分:0)

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

编辑器>嵌入>导航控制器