我需要在用户离开某个视图之前显示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,并且在此之后显示警报视图并且应用程序崩溃,因为它的委托是已经从导航堆栈中弹出的视图控制器...我找不到解决这个问题的方法情景,任何人都可以帮助我吗?
谢谢!
答案 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)
我很想将您尝试保护的数据操作移动到模态视图控制器中,并处理您选择忽略模态演示的任何操作的验证。对我来说,这是模态的重点:在与应用程序的其余部分交互之前必须完成的事情。