在我的RecordViewController中,在didSelectRowAtIndexPath
内我推送了一个detailViewController(继承自UIViewController
):
[[self navigationController] pushViewController:detailViewController animated:YES];
一旦DetailViewController出现,我可以在左上角看到Back
navigationButton,它会自动弹出当前视图控制器以返回到之前的ViewController。
现在我需要显示UIAlertView
并询问用户是否应该保存数据。
只有当用户做出决定时,当前的视图控制器才会消失。
我的问题是,如果我将此代码放入viewWillDisappear
,那已经太晚了。在显示UIAlertView
时,我无法停止此过程。这需要在用户按下后退按钮时被拦截。
我可以覆盖一种方法来实现这个目标吗?
答案 0 :(得分:1)
创建一个UIBarButtonItem:
UIBarButtonItem * backBarButtonItem = [[UIBarButtonItem alloc] initWithTitle: @"Back"
style: UIBarButtonItemStyleDone target: self action: @selector(onBackButtonTapped:)];
将其分配给左栏按钮项目:
self.navigationItem.leftBarButtonItem = backBarButtonItem;
实施onBackButtonTapped API:
- (void) onBackButtonTapped: (id) sender
{
// Display an UIAlertView
}
您可能想要自定义后退按钮。请查看UIBarButtonItem了解更多详情。
答案 1 :(得分:0)
而不是推送详细视图控制器,收集数据的常用方法是以模态方式呈现一个。这将在(新)导航栏的左侧和右侧为您提供2个空闲空间,以放置“保存”和“取消”按钮。
UINavigationController *navigationController = [[UINavigationController alloc] initWithRootViewController:detailViewController];
[self presentViewController:navigationController animated:YES completion:nil];
// detailViewController will have to set up buttons in its init
您可以使用您创建的委托协议来处理呈现(即非详细信息)视图控制器中的保存和取消操作。
答案 2 :(得分:0)
概述:我们的想法是拥有自己的barbutton来拦截VC的退出。
在viewDidLoad中,您可以执行此操作
UIBarButtonItem *backButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"Back"
style:UIBarButtonItemStyleDone target:self action:@selector(Back:)];
self.navigationItem.backBarButtonItem = backButtonItem;
然后你的Back:方法可以做到这一点
-(void)Back:(id) sender
{
//Your code for showing AlertView with delegate as self. Remember to conform to the UIAlertViewDelegate protocol.
}
然后将您的保存功能放在
中- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
{
if (selected buttonIndex is the one for saving data)
{
//save your data
}
//popViewController
}