以编程方式调用 iOS 上的导航控制器后退按钮

Posted

技术标签:

【中文标题】以编程方式调用 iOS 上的导航控制器后退按钮【英文标题】:Programmatically call navigation controller back button on iOS 【发布时间】:2011-01-07 15:36:15 【问题描述】:

在基于 UINavigationController 的 iPhone 应用程序中,我希望在一种方法中执行相当于按下后退按钮并返回视图的程序化方法。

即自动按下 Jobs 按钮,如下所示:

我可以拨打通用 ios 电话,还是需要更多信息?

【问题讨论】:

【参考方案1】:

你应该打电话

popViewControllerAnimated:

这与使用 pushViewController:animated: 添加视图控制器相反

【讨论】:

【参考方案2】:

UINavigationController-popViewControllerAnimated: 方法应该做你想做的事:

[navigationController popViewControllerAnimated:YES];

【讨论】:

太棒了,感谢史蒂夫和尼尔斯。我使用的解决方案是 [self.navigationController popViewControllerAnimated:YES];容易;) 这很好用,除了在 uitabbar 上添加了视图控制器。有什么线索吗?? 我添加了[self.navigationController popViewControllerAnimated:YES];,但它什么也没做,但是在点击该按钮时会发出警报。 嗯,我在控制台中看到一个空白屏幕、一个无响应的应用程序和以下内容:“以意外状态完成导航转换。导航栏子视图树可能已损坏。”【参考方案3】:

假设您实际上不想以编程方式按下按钮,而只是复制按下按钮的结果,您应该告诉导航控制器弹出当前视图控制器。

[self.navigationController popViewControllerAnimated:YES];

这会将它从堆栈中移除,并返回到之前的视图控制器。

【讨论】:

【参考方案4】:
[self.navigationController popViewControllerAnimates:YES];

是最好的选择,但如果您不在同一个视图控制器类上,或者您的委托在调用后退按钮方法之前发生更改,那么您也可以尝试--

首先你必须定义返回按钮---

UIBarButtonItem *newBackButton = [[UIBarButtonItem alloc] initWithTitle: @"anyTitleForBackButton" style: UIBarButtonItemStyleBordered target: nil action: @selector(backButtonTapped)];

[[self navigationItem] setBackBarButtonItem: newBackButton];

[newBackButton release];

然后在 backButtonTapped 方法中可以调用--

[self.navigationController pushViewController:desiredViewController animated:YES];

【讨论】:

【参考方案5】:

Swift 3.0

返回根视图

self.navigationController?.popToRootViewController(animated: true)

返回上一视图

self.navigationController?.popViewController(animated: true)

斯威夫特 2.3

返回根视图

self.navigationController?.popToRootViewControllerAnimated(true)

返回上一视图

self.navigationController?.popViewControllerAnimated(true)

【讨论】:

以上是关于以编程方式调用 iOS 上的导航控制器后退按钮的主要内容,如果未能解决你的问题,请参考以下文章

以编程方式创建的后退按钮未显示在导航栏中?

以编程方式创建带有后退按钮的导航控制器

导航视图控制器不显示后退按钮

UINavigationBar 后退按钮图标

在导航控制器中设置后退按钮

IOS应用导航栏后退按钮