0

我似乎无法找到一种方法来检测用户何时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];
}

然而,前 2 个工作得很好,当我按下时Done我运行一个AFNetworking呼叫onComplete,然后我执行一个[[NSNotificationCenter defaultCenter] postNotificationName:]然后parentViewController运行一些事情并刷新屏幕并弹出子视图控制器。在这个子视图控制器弹出时,前 2 个也运行。

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

4

2 回答 2

0

我会实现一个 unwind segue,Unwind segue是做什么用的,你如何使用它们?

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

  - (IBAction)unwindToParent:(UIStoryboardSegue *)unwindSegue
于 2013-10-07T23:03:20.947 回答
0

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

于 2014-01-17T16:29:47.727 回答