Ios 如何覆盖back navigationItem?
在我的RecordViewController中,在Ios 如何覆盖back navigationItem?,ios,ios7,uinavigationitem,Ios,Ios7,Uinavigationitem,在我的RecordViewController中,在didselectRowatinedexpath中,我推送一个detailViewController(它继承自UIViewController): 出现DetailViewController后,我可以在左上角看到一个BacknavigationButton,它会自动弹出当前视图控制器以返回到上一个ViewController 现在我需要显示一个UIAlertView并询问用户是否应该保存数据 只有当用户做出决定时,当前视图控制器才会消失 我
didselectRowatinedexpath
中,我推送一个detailViewController(它继承自UIViewController
):
出现DetailViewController后,我可以在左上角看到一个Back
navigationButton,它会自动弹出当前视图控制器以返回到上一个ViewController
现在我需要显示一个UIAlertView
并询问用户是否应该保存数据
只有当用户做出决定时,当前视图控制器才会消失
我的问题是,如果我将此代码放入视图将消失
,就已经太晚了。显示UIAlertView
时,我无法停止进程。这需要在用户按下后退按钮时被拦截
是否有一种方法可以替代以实现此目的?收集数据的常用方法是以模态方式呈现数据,而不是推送局部视图控制器。这将在(新)导航栏的左侧和右侧提供2个可用空间,用于放置“保存”和“取消”按钮
UINavigationController *navigationController = [[UINavigationController alloc] initWithRootViewController:detailViewController];
[self presentViewController:navigationController animated:YES completion:nil];
// detailViewController will have to set up buttons in its init
您可以使用您创建的代理协议来处理呈现(即不是细节)视图控制器中的保存和取消操作。概述:想法是使用您自己的按钮来拦截VC的退出 在您的视图中,您可以这样做
UIBarButtonItem *backButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"Back"
style:UIBarButtonItemStyleDone target:self action:@selector(Back:)];
self.navigationItem.backBarButtonItem = backButtonItem;
-(void)Back:(id) sender
{
//Your code for showing AlertView with delegate as self. Remember to conform to the UIAlertViewDelegate protocol.
}
然后你的背:方法可以做到这一点
UIBarButtonItem *backButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"Back"
style:UIBarButtonItemStyleDone target:self action:@selector(Back:)];
self.navigationItem.backBarButtonItem = backButtonItem;
-(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
}
创建UIBarButtonItem:
UIBarButtonItem * backBarButtonItem = [[UIBarButtonItem alloc] initWithTitle: @"Back"
style: UIBarButtonItemStyleDone target: self action: @selector(onBackButtonTapped:)];
将其分配给左栏按钮项:
self.navigationItem.leftBarButtonItem = backBarButtonItem;
实现OnBackButtonPapped API:
- (void) onBackButtonTapped: (id) sender
{
// Display an UIAlertView
}
您可能需要自定义“后退”按钮。请查看更多详细信息。iOS应用程序指南规定,所有数据都应隐式保存,即无保存/取消按钮。那么核心数据的撤消功能如何?如果从来没有取消的必要?:)