【问题标题】:Nested UIViewController is returned:'ing out too far返回嵌套的 UIViewController:'ing out too far
【发布时间】:2014-04-14 01:32:25
【问题描述】:

我认为我缺少一些基本的东西。我有一个故事板,看起来像:

简而言之,我有 3 个自己的控制器,分别嵌入在 UINavigationControllers 中。

我将这些(我自己的)控制器称为 1、2 和 3,从左到右。我对图片进行了注释以显示我是如何连接的。我在控制器 1 和 2 之间创建了一个 segue,通过将其显示指示器连接到包含 #2 的导航控制器。我通过连接控制器并命名它来创建 2 和 3 之间的 segue。我使用

以编程方式调用该 segue
[self performSegueWithIdentifier:@"OpenValvesSelector" sender:self];

对于控制器 2 和 3,我将取消和保存导航项都连接到包含控制器的退出项。

问题是,当我打开 3 并选择 Save 项目中的 Cancel 时,它不仅关闭了该视图,还关闭了 2,将我返回到控制器 1。我不想要那个.我正在尝试使用 3 来编辑 2 中的一些内容。如何让它刚刚返回:到 2,而不是 1?

从更广泛的角度来看,我并不完全相信我在UINavigationControllers 那里做了正确的事情。我尝试不使用包含 3 的 UIViewController,但是没有在哪里编辑该场景的标题/按钮项。我已阅读 Apple Docs on View Controller Programming Guide for iOS,但似乎没有这种详细程度。

【问题讨论】:

  • 我也不相信。您可能应该只有 1 个导航控制器并推送 segue。

标签: ios ios7 uiviewcontroller uistoryboard uistoryboardsegue


【解决方案1】:

当您使用展开转场时,运行时决定“向后”展开多远的方式是首先查看实现相应展开方法的位置。因此,如果您在视图控制器 3 中并且想要展开到视图控制器 2,则需要在视图控制器 2 中实现展开方法。

(别担心:您仍然可以从视图控制器 2 放松到视图控制器 1。)

【讨论】:

  • 是的。这就是我缺少的部分。
  • 看看我的书excruciating详细介绍了放松segues是如何在幕后实际工作的。不要不要查看 iOS 6 版本;我在那里得到了错误的答案。但是对于 iOS 7 版本,我确实正确地理解了它。
  • 啊哈,我刚刚发现的另一个亮点是它不必是returned:。它将指定具有适当签名的任何链接方法。当然希望我知道文档在哪里。
  • 它会指定它可以看到的任何方法,即使不是视图控制器的“链上”。但是,无论您选择什么,它都会在运行时遍历链时寻找它,因此请谨慎选择。同样,这一切都在我的书中。
  • 买了。到目前为止享受它。 :)
猜你喜欢
  • 2012-04-03
  • 2013-02-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-06
  • 1970-01-01
  • 2016-04-10
相关资源
最近更新 更多