按下导航箭头

时间:2016-06-20 23:37:46

标签: ios swift uinavigationcontroller uistoryboardsegue unwind-segue

我已经看到很多方法将数据从视图控制器传递回导航堆栈中的父级,即使我认为我要描述的情况应该很常见,但这些都不是似乎解决了它。我想做什么:

  1. 将子视图控制器推入导航堆栈。我在父视图控制器的prepareForSegue(_:sender)
  2. 中设置了它的属性
  3. 编辑子视图控制器的属性。直到这里一切正常。
  4. 点击箭头后退按钮(位于左上角)时,应弹出子视图控制器(这会自动发生)并需要将编辑后的数据传回给父级。
  5. 如果我可以在故事板中设置展开动作,这将很容易,但这是不可能的,因为箭头后退按钮仅在运行时显示。当按下箭头时,prepareForSegue(_:sender)似乎没有被叫到孩子身上。无论是孩子还是父母,canPerformUnwindSegueAction(_:fromViewController:withSender)unwindForSegue(_:towardsViewController)segueForUnwindingToViewController(_:fromViewController:identifier:)都不会。

    根据建议我here我可以覆盖孩子的viewWillDisappear方法并从导航堆栈访问父级,但父母必须有办法在某处访问孩子,或者这将是糟糕的设计,对吧?我很感激任何帮助!我定位的是iOS 7 +。

1 个答案:

答案 0 :(得分:0)

您可以使用委托和设置,如:

  • child是父控制器的属性。
  • parent是子控制器的委托属性。 (委托alway weak属性)

您可以通过child.delegate从子级访问父级。和父母通过财产的孩子。