UINavigationController - 在弹出视图控制器之前运行代码

时间:2012-12-21 08:18:43

标签: iphone objective-c ios

我有一堆UIViewController子类。每个修改NSManagedObject模型。他们中的许多人也提出了他们自己的模态视图控制器。

当用户'弹出'视图控制器或推送下一个视图控制器时,我需要保存对NSManagedObjectContext的更改。

目前,我正在隐藏默认后退按钮并使用UIBarButtonItem target和自定义self设置我自己的action

这没关系,但理想情况下,我想使用默认的后退按钮并在弹出之前运行代码。有没有办法在pop之前运行我自己的代码?

(我不希望将代码放入viewWillDisappear,因为持久存储到磁盘可能很昂贵,而且这种方法也可以由视图控制器显示的模式触发。)可以这样做吗?

5 个答案:

答案 0 :(得分:4)

您可以在viewDidDisappear中检查self是否为1)self.navigationController.viewControllers中的第二个最后一个元素后执行此操作(下一个VC的情况)刚被推或)2)self.navigationControllernilself VC刚刚弹出)。

答案 1 :(得分:1)

是..导航控制器有一个委托,指示何时弹出或推动视图控制器..您可以使用它来执行任务...

答案 2 :(得分:0)

在代码中添加以下方法:

- (void) viewWillDisappear:(BOOL)animated{
     //your code here
}

答案 3 :(得分:0)

我使用viewWillDissappear进行持续的任何更改。 如果需要,我使用viewWillAppear来识别在其他视角控制器完成工作时可能发生的任何更改(重新加载数据)。

答案 4 :(得分:0)

对于viewWillDisappear中的弹出检查isMovingFromParent

func viewWillDisappear(_ animation:Bool){
    super.viewWillDisappear(animation);
    if isMovingFromParent {
        // your code here
    }
}