使用UINavigationController和默认后退按钮时如何将数据传回父视图?

时间:2011-04-05 02:48:19

标签: iphone ios delegates uiviewcontroller uinavigationcontroller

背景 - 所以就高级方法而言,我似乎是:

  1. 在您进行UINavigationController链的级别时保存/保持设置 - 所以当最初开始更改设置或创建设置时,需要一组默认值 - 即如果应用程序死亡,则在任何时间点都是如此设置有效
  2. 随时保存更改,一旦您退出UINavigationController屏幕树(设置了所有设置),就会有一个可以保存的地方
  3. 这个问题主要关注我试图实施的选项2。

    计划 - 在设置类型UINavigationController中,当子视图被推入堆栈时,我打算将设置的一部分的现有(或默认)细节从父视图传递到子视图。问题是当这个数据被更新时,并且假设我想坚持使用默认的后退按钮,似乎没有办法拦截默认的后退按钮,所以当我准备将孩子从堆栈中弹出时就在此之前,我将调用一个委托,它将最新的设置传递回父母。

    问题 - 当使用UINavigationController并希望坚持使用默认的Back Button(左箭头上的东西)时,如何将更新的数据从子控制器传递回父控制器。 < / p>

    也许,我可能不是如何传回数据我想(我将使用委托),而是如何在子控制器中的正确时间点挂钩回调方法然后使用委托方法将数据传回。

2 个答案:

答案 0 :(得分:3)

使用Delegate可能是您的解决方案。

可以找到教程:

http://timneill.net/2010/11/modal-view-controller-example-part-2/

这对我很有帮助。

编辑:

  1. 听起来你需要自己制作一个后退按钮,信息:
  2. UINavigationController "back button" custom text?

    然后添加方法:

    [self.navigationController popViewControllerAnimated:YES]; 
    

    回到上一个视图。然后,您可以将自己的代码添加到该后退按钮。

    1. 更简单的解决方案:实现'viewWillDisapper'方法。
    2. 每次按下后退按钮都会调用此方法。但要注意它是否转向另一种观点而不是回头。

答案 1 :(得分:2)

您可能需要考虑使用单独的对象作为SettingsController。您可以将其设置为视图的委托或直接调用其上的函数(最有可能使用单例设计模式)。设置控制器可以保存缓存的数据,当向导完成(最后一页被解除分配或类似的东西)时,您可以让设置控制器永久保存数据。

另一个选项是添加一个导致保存的保存或完成按钮,否则后退按钮用作取消按钮。从UI的角度来看,如果您没有“保存”按钮,用户可能会认为设置会立即更改。