Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如何覆盖back navigationItem?_Ios_Ios7_Uinavigationitem - Fatal编程技术网

Ios 如何覆盖back navigationItem?

Ios 如何覆盖back navigationItem?,ios,ios7,uinavigationitem,Ios,Ios7,Uinavigationitem,在我的RecordViewController中,在didselectRowatinedexpath中,我推送一个detailViewController(它继承自UIViewController): 出现DetailViewController后,我可以在左上角看到一个BacknavigationButton,它会自动弹出当前视图控制器以返回到上一个ViewController 现在我需要显示一个UIAlertView并询问用户是否应该保存数据 只有当用户做出决定时,当前视图控制器才会消失 我

在我的RecordViewController中,在
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应用程序指南规定,所有数据都应隐式保存,即无保存/取消按钮。那么核心数据的撤消功能如何?如果从来没有取消的必要?:)