Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/118.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 当按下导航控制器后退按钮且未弹出时检测_Ios_Objective C_Uinavigationcontroller - Fatal编程技术网

Ios 当按下导航控制器后退按钮且未弹出时检测

Ios 当按下导航控制器后退按钮且未弹出时检测,ios,objective-c,uinavigationcontroller,Ios,Objective C,Uinavigationcontroller,我似乎找不到一种方法来检测用户何时按下UINavigationController中的back按钮。我已尝试使用UINavigationControllerDelegate - (void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated 我试过了

我似乎找不到一种方法来检测用户何时按下
UINavigationController
中的
back
按钮。我已尝试使用
UINavigationControllerDelegate

- (void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated
我试过了

- (void)viewWillDisappear:(BOOL)animated {
    [super viewWillDisappear:animated];

    if (self.isMovingFromParentViewController) {
        NSLog(@"BACK BUTTON WAS PRESSED!!!!!!!!!");
        [[[NSManagedObjectContext MR_defaultContext] undoManager] endUndoGrouping];
        [[NSManagedObjectContext MR_defaultContext] undo];
    }

}
我也试过了

 - (void)viewDidLoad
 {
    self.navigationItem.backBarButtonItem.target = self;
    self.navigationItem.backBarButtonItem.action = @selector(cancelPressed);
 }

- (void)cancelPressed
{
    NSLog(@"CANCEL BUTTON WAS PRESSED!!!!!!!!!");
    [[[NSManagedObjectContext MR_defaultContext] undoManager] endUndoGrouping];
    [[NSManagedObjectContext MR_defaultContext] undo];
}
但是,前两个功能很好,当我按下
Done
时,我运行一个
AFNetworking
调用,然后
onComplete
完成该调用,我执行一个
[[NSNotificationCenter defaultCenter]postNotificationName:]
,然后
父视图控制器
运行一些操作,刷新屏幕并弹出子视图控制器。当这个子视图控制器弹出时,前2个也会运行


我提到的最后一个根本不起作用。是否有合适的方法来检查导航控制器的
后退
按钮是否被按下,该按钮将仅针对后退按钮运行,而不仅仅是在视图控制器弹出时运行?

我将执行一个展开序列

然后,您可以在父视图控制器上实现以下方法,当用户按“完成”时,会调用该方法


我用了一种不同的方法。我的总体目标是取消设置已更改的核心数据项,这些数据项已更改,但随后按下了“后退”按钮。相反,我为编辑创建了一个新的上下文。如果按下保存按钮,新上下文将合并到主上下文中。如果按下“后退”按钮,新上下文将消失,更改也将消失。

您可以使用自定义UIBarButtonim来完成此操作,但我不认为您所描述的是使用stock UINavigationController后退按钮是可能的。这仍然会导致
视图将消失
运行,而该视图仍将运行撤消管理器。
  - (IBAction)unwindToParent:(UIStoryboardSegue *)unwindSegue