在iOS中离开视图之前要求用户确认
我需要在用户离开某个视图之前显示一个UIAlertView
,或者点击一个“后退”导航栏button,或者点击我拥有的标签栏中的一个标签项,以便要求他确认。 这将是一个双button提醒,一个“取消”一个留在视图中,一个“接受”一个离开。 我需要这样做,因为我必须让用户意识到如果离开,未保存的更改将会丢失。
我试图通过在viewWillDisappear:
方法中创build并显示警报视图来执行此操作:
- (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]; }
但是,无论如何,视图是popup窗口,警告视图显示之后,应用程序崩溃,因为它的委托是已经从导航堆栈已经popup的视图控制器…我没有find解决这个情况的方法,可以有人帮我吗?
谢谢!
当viewWillDissapear不起作用时显示警报视图,因为视图已经消失,它正在被移除。
你可以做的是在按下后退button的时候给自己添加一个自定义的动作,然后当你按下后退button时你决定要做什么,你可以显示警报视图,然后在其中一个button的过程中closures视图,像这样的东西:
- (id)init { if (self = [super init]) { self.navigationItem.backBarButtonItem.target = self; self.navigationItem.backBarButtonItem.action = @selector(backButtonPressed:); } return self; }
然后在按下后退button时显示警报视图:
-(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]; }
现在,当按下警报视图中的确认button时,只需调用:
[self.navigationController popViewControllerAnimated:YES];
或者,如果用户取消,则不做任何事情
我会试图将您要保护的数据操作移动到模态视图控制器中,并处理您select忽略模态表示的任何操作的validation。 对我来说,这是模态的一点:在与应用程序的其他部分进行交互之前必须完成的事情。