我有一个带有由导航控制器管理的后退按钮的视图,我想在用户单击后退按钮时检查文件是否已保存。
如果文件已保存,您将返回到上一个视图,否则 uialertview 会询问您是否要保存文件。
所以我这样做了,但视图消失了,然后警报视图出现了。
-(void)viewWillDisappear:(BOOL)animated {
if(!self.fileSaved){
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"" message:@"Save the file?" delegate:self cancelButtonTitle:@"No" otherButtonTitles:@"Yes",nil];
[alert show];
[alert release];
}
}
- (void)alertView:(UIAlertView *)alertView didDismissWithButtonIndex:(NSInteger)buttonIndex
{
switch (buttonIndex) {
case 0:
NSLog(@"NO");
break;
case 1:
NSLog(@"yes");
break;
default:
break;
}
}
当 viewWillDisappear 被调用时,已经太晚了。您应该尽早拦截后退按钮。我从未这样做过,但我的建议是在 viewDidAppear 方法中的 navigationBar 属性上设置委托:
// save the previous delegate (create an ivar for that)
prevNavigationBarDelegate = self.navigationController.navigationBar.delegate;
self.navigationController.navigationBar.delegate = self;
不要忘记将其设置回 viewWillDisappear 中:
self.navigationController.navigationBar.delegate = prevNavigationBarDelegate;
然后拦截shouldPopItem方法:
- (BOOL)navigationBar:(UINavigationBar *)navigationBar shouldPopItem:(UINavigationItem *)item {
if(!self.fileSaved) {
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"" message:@"Save the file?" delegate:self cancelButtonTitle:@"No" otherButtonTitles:@"Yes",nil];
[alert show];
[alert release];
return NO;
}
if ([prevNavigationBarDelegate respondsToSelector:@selector(navigationBar:shouldPopItem:)])
return [prevNavigationBarDelegate navigationBar:navigationBar shouldPopItem:item];
return YES;
}
在对话框的 YES 处理程序中,手动弹出控制器:
[self.navigationController popViewController:YES];
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)