传统上,数据通过调用 prepareForSegue
传递给子 Controller ,例如,当单击表格单元格时。
在 iOS 7 中,似乎有一个新的导航习惯用法,您可以在其中拖动屏幕的左边缘以返回导航堆栈。似乎当您刚开始手势时, subview 被删除并显示父 View ,但是如果您通过拖动不够远来取消它,它将被取消, subview 会弹回原位,但是没有 prepareForSegue
调用。此时 subview 中的数据项是nil
,这让我觉得它是重新创建的。
如何正确地将数据传递给既适用于 segues 又适用于此导航习惯用法的 subview Controller ?
最佳答案
关于被销毁的拖动弹出的 View Controller ,你是错误的,它不是。当您开始拖动时调用 viewWillDisappear,如果它取消,将调用 viewWillAppear 和 viewDidAppear,但不会调用 viewDidLoad 或 dealloc,因此不会创建新的 Controller 。如果要将数据传回拖动时出现的 Controller ,则应使用委托(delegate)协议(protocol)。您可以将该 Controller 设置为在您执行原始推送时推送的那个 Controller 的委托(delegate)(或转发到第二个 Controller 的 segue)。此外,将这些 Controller 称为父 Controller 和子 Controller 并不正确——它们都是导航 Controller 的 viewControllers 数组中的 Controller 。这两个 Controller 中的任何一个的父级是导航 Controller 。
关于ios - 在 iOS7 中取消交互式弹出手势时如何将数据传递给子 Controller ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20015879/