繁体   English   中英

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

[英]Detect when navigationController back button is pressed and not popped

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

但是,前2个效果很好,当我按Done我运行一个AFNetworking调用,然后运行onComplete ,执行[[NSNotificationCenter defaultCenter] postNotificationName:] ,然后parentViewController运行一些操作并刷新屏幕并弹出子视图控制器。 弹出此子视图控制器后,前两个也将运行。

我提到的最后一个根本不起作用。 有没有检查,如果以适当的方式back一个navigationController的按钮被按下,将仅出于后退按钮只运行时的视图控制器被弹出?

我将实施一个放逐序列“放逐序列”是做什么用的,以及如何使用它们?

然后,您可以在父viewController上实现以下方法,当用户按下“完成”时将调用该方法

  - (IBAction)unwindToParent:(UIStoryboardSegue *)unwindSegue

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM