阻止导航控制器导航并要求用户确认

Posted

技术标签:

【中文标题】阻止导航控制器导航并要求用户确认【英文标题】:Block a navigation controller from navigating and ask for user confirmation 【发布时间】:2011-06-12 00:22:58 【问题描述】:

我有一个UITableViewController,它使用didSelectRowAtIndexPath: 来用initWithNibName: 初始化一个视图控制器。用户可以返回表格视图,但我想执行 if/else 并显示警报视图以确认用户是否要返回表格视图。我不知道从哪里开始。

简而言之,我想自定义返回按钮。

【问题讨论】:

【参考方案1】:

你不能创建一个UIBarButtonItem 实例并将其分配给视图控制器的导航项吗?像这样的,

UIBarButtonItem * backButton = [[[UIBarButtonItem alloc] initWithTitle:@"Back" 
                                                                 style:UIBarButtonItemStyleBordered
                                                                target:self
                                                                action:@selector(backButtonPressed:)] autorelease];
self.navigationItem.leftBarButtonItem = backButton;

然后在backButtonPressed: 中,触发警报视图。

- (void)backButtonPressed:(id)sender 
    // Trigger an alert view.

根据用户的选择,您可以弹出或不弹出视图控制器。

【讨论】:

太棒了!这就是我需要的。我设法自定义按钮并且触发器工作!但是我应该在代码中添加什么让它像正常的后退按钮一样工作?因为现在它再也回不去了。【参考方案2】:

返回用户的按钮是一个IBAction(或者它是您在以编程方式设置按钮时定义的方法),因此您可以将here中的代码添加到IBAction中,并将返回的代码放在

- (void)alertView:(UIAlertView *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex

【讨论】:

这似乎可以阻止导航控制器导航,但我希望它反过来。 tableviewcontroller 使用navigationcontroller 来初始化视图控制器。我想在它返回 tableview 时抓住它。谢谢。 为什么要在它返回时抓住它?当用户点击按钮时,您会想要抓住它,就像在您原来的问题和标题中一样。 导航控制器初始化一个视图控制器,用户可以在其中进行更改。我想检查用户是否想在“返回”代码执行之前保存/放弃更改。 你又一次失败了。可能我的回答不够清楚。当用户点击后退按钮时,有一个方法会被调用,它会转到上一个视图,而不是让它调用一个警报视图,并使用我上面发布的那个方法来检查“确定”按下去上一个.查看。

以上是关于阻止导航控制器导航并要求用户确认的主要内容,如果未能解决你的问题,请参考以下文章

在 UISearchController 中按取消后导航栏被阻止

标签栏第二次点击弹出到导航控制器 - 如何停止它

在导航控制器上添加片段而不是替换片段?

无法从警报完成中弹出导航控制器:

弹出导航控制器并选择选项卡?

停止从导航控制器快速导航