在iOS中离开视图之前要求用户确认

时间:2013-10-06 15:45:51

标签: ios uinavigationcontroller uialertview dismiss

我需要在用户离开某个视图之前显示UIAlertView,方法是点击“后退”导航栏按钮或点击我的标签栏中的其中一个标签项,以便询问他确认。这将是一个双按钮警报,一个“取消”一个留在视图中,一个“接受”一个离开。我需要这样做,因为我必须让用户知道如果离开,未保存的更改将会丢失。

我尝试通过在viewWillDisappear:方法中创建和显示提醒视图来执行此操作:

- (void)viewWillDisappear:(BOOL)animated
{

   UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:NSLocalizedString(@"Exit", @"")
                                                    message:NSLocalizedString(@"Are you sure you want to leave? Changes will be discarded", @"")
                                                   delegate:self
                                          cancelButtonTitle:NSLocalizedString(@"Cancel", @"")
                                          otherButtonTitles:NSLocalizedString(@"Accept", @""), nil];

   [alertView show];

   [super viewWillDisappear:animated];
}

但是视图仍然是pop,并且在此之后显示警报视图并且应用程序崩溃,因为它的委托是已经从导航堆栈中弹出的视图控制器...我找不到解决这个问题的方法情景,任何人都可以帮助我吗?

谢谢!

2 个答案:

答案 0 :(得分:2)

当viewWillDissapear不起作用时显示警报视图,因为视图已经消失,它正在被移除。

你可以做的是,当按下后退按钮时自己添加一个自定义动作,然后你决定按下后退按钮时要做什么,你可以显示警报视图,然后在其中一个按钮程序中解雇观点,如下:

- (id)init {
    if (self = [super init]) {
    self.navigationItem.backBarButtonItem.target = self;
    self.navigationItem.backBarButtonItem.action = @selector(backButtonPressed:);
  }
    return self;
}

然后在按下后退按钮时显示警报视图:

-(void)backButtonPressed:(id)sender
 {
     UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:NSLocalizedString(@"Exit", @"") message:NSLocalizedString(@"Are you sure you want to leave? Changes will be discarded", @"") delegate:self cancelButtonTitle:NSLocalizedString(@"Cancel", @"") otherButtonTitles:NSLocalizedString(@"Accept", @""), nil];      
    [alertView show];           
}

现在,当按下警报视图中的确认按钮时,只需调用:

[self.navigationController popViewControllerAnimated:YES];

如果用户取消

,则不执行任何操作

答案 1 :(得分:1)

我很想将您尝试保护的数据操作移动到模态视图控制器中,并处理您选择忽略模态演示的任何操作的验证。对我来说,这是模态的重点:在与应用程序的其余部分交互之前必须完成的事情。