如果未保存更改,则中止导航(ios7)

时间:2014-07-15 16:05:46

标签: ios storyboard segue

我想提示用户在我们的IOS7应用程序中退出编辑实体之前保存更改。

早期的堆栈溢出说我可以检测到这将发生在这里:但我一直无法中止导航。

-(void)willMoveToParentViewController:(UIViewController *)parent {
NSLog(@"\t\t\tThis VC has has been pushed popped OR covered");

if (!parent) {
    NSLog(@"\t\t\tThis happens ONLY when it's popped");

}

}

基本上如果我的managedObjectContext有未保存的更改,我想在后退导航事件发生之前弹出一个警告框。有什么想法吗?

我尝试了这个解决方案:https://stackoverflow.com/a/19210888/2069812 但似乎没有用。

3 个答案:

答案 0 :(得分:1)

您可以使用自定义后退按钮并自行处理其触摸事件。在这种情况下,这是最简单的解决方案。

例如:

self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"Button" style: UIBarButtonItemStylePlain target:self action:@selector(buttonDidTouch:)];

- (void)buttonDidTouch:(id)sender)
{
    if (edited) {
        [self.navigationController popViewControllerAnimated:YES];
    } else {
        // Do your stuffs
    }
}

答案 1 :(得分:0)

我知道我的答案不是使用-(void)willMoveToParentViewController:(UIViewController *)parent,但最简单的方法就是不显示后退按钮。

这可以通过以下方式完成:

self.navigationItem.hidesBackButton = YES;

您还可以按照here

所述禁用滑动手势
if ([self.navigationController respondsToSelector:@selector(interactivePopGestureRecognizer)]) {
    self.navigationController.interactivePopGestureRecognizer.enabled = NO;
}

但如果你真的想在那里入侵那么我会尝试一个自定义后退按钮并处理控制器中的动作。

答案 2 :(得分:0)

我刚刚在IB中制作了一个自定义按钮并附加到它上面。问题解决了。