1

我需要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];
}

但是视图无论如何都会弹出,并且在那之后显示警报视图并且应用程序崩溃,因为它的委托是已经从导航堆栈中弹出的视图控制器......我找不到解决这种情况的方法,可以有人帮我吗?

谢谢!

4

2 回答 2

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];

或者如果用户取消,什么也不做

于 2013-10-06T16:06:07.030 回答
1

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

于 2013-10-06T16:11:56.413 回答