检测何时按下navigationController后退按钮但未弹出

时间:2013-10-07 22:36:38

标签: ios objective-c uinavigationcontroller

我似乎找不到一种方法来检测用户何时按下back中的UINavigationController按钮。我尝试过使用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:]我会parentViewController,然后是back运行一些东西并刷新屏幕并弹出子视图控制器。在这个子视图控制器弹出后,前两个也运行。

我提到的最后一个根本不起作用。是否有正确的方法来检查是否按下了只为后退按钮运行的navigationController的{{1}}按钮,而不仅仅是在弹出视图控制器时?

2 个答案:

答案 0 :(得分:0)

我会实现一个展开segue,What are Unwind segues for and how do you use them?

然后,您可以在父viewController上实现以下方法,该方法在用户按下" Done"

  - (IBAction)unwindToParent:(UIStoryboardSegue *)unwindSegue

答案 1 :(得分:0)

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