无法让默认 UINavigationController 后退按钮工作

Posted

技术标签:

【中文标题】无法让默认 UINavigationController 后退按钮工作【英文标题】:Can't get default UINavigationController back button to work 【发布时间】:2015-03-11 15:07:16 【问题描述】:

首先,我已经阅读了网络上几乎所有的问题和答案,以及关于导航栏/后退按钮/标题/导航项等的内容。我有一个导航控制器和视图控制器。没有什么花哨。无论我做什么,当我按下一个新的视图控制器时,我都无法显示后退按钮。既不是通过故事板推送,也不是以编程方式推送。我的视图控制器和导航栏正确显示,当我点击后退按钮的位置时,它确实有效,它会弹出视图控制器,但是它没有显示。

在你说之前,我先列出我做了什么:

我已将导航控制器的 Shows Navigation Bar 设置为 yes。 我已在情节提要的导航控制器内为我的根视图控制器设置了标题。 我在故事板上的导航控制器中为我的根视图控制器设置了一个后退按钮标题。 我没有任何自定义代码涉及导航栏/导航项/左栏按钮/右栏按钮/隐藏后退按钮/后退按钮项目。 我为导航控制器设置了标题。

无论我做什么,我的后退按钮都不会显示。当我调试时,它设置为nil。我试过实例化一个,但它也没有帮助。我错过了什么?

【问题讨论】:

【参考方案1】:

首先检查你推送的控制器在查看器中有一个导航项,你可以设置标题、后退按钮和提示。我发现根据情节提要如何创建控制器,它可能有也可能没有你可以在视图树中看到的控制器。设置后退按钮似乎不起作用,除非您可以在情节提要的两个控制器中实际看到一个。

其次,我最近才意识到的是,您在控制器中设置了后退按钮的标题,您正在推动“从”,而不是在显示后退按钮时将显示的控制器中。

例如如果您有控制器 A 和控制器 B,并且您从 A 推送到 B:您必须在控制器 A 的 navigationItem 中设置后退按钮的标签,而不是在控制器 B 的 navigationItem 中。您可能已经知道这一点,但它令人困惑。

【讨论】:

【参考方案2】:

在.h中定义一个属性

@property (strong, nonatomic) UIBarButtonItem *backButton;

in viewDidLoad in .m

self.backButton = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"backButton.png"] style:UIBarButtonItemStylePlain target:self action:@selector(backButtonPressed)];
self.navigationItem.backBarButtonItem = self.backButton;

并添加方法

-(void) backButtonPressed 

 [self.navigationController popViewControllerAnimated:YES];


哦,误读了...您不想要自定义按钮,只需要普通按钮吗?也许后面有一个 UIBarButtonSystemItem ?拿这个而不是自定义图像...

检查色调?也许它设置为clearcolor??

【讨论】:

【参考方案3】:

这要简单得多。实际上,一切都在正常运行。经过一番调查([[UIWindow keyWindow] recursiveDescription]),我意识到只有我将故事板的全局色调设置为与导航栏相同的颜色是错误的。我已明确将色调设置为白色,现在可以看到文字了。

【讨论】:

以上是关于无法让默认 UINavigationController 后退按钮工作的主要内容,如果未能解决你的问题,请参考以下文章

Django - 无法让加载数据工作

无法让我的 .html 文件保存在 chrome 中

如何让表单默认为浏览器样式

Vagrant:无法让 NFS 工作

如何让 RecyclerView 平滑滚动?

如何让 Octave 默认使用“gnuplot”而不是“fltk”?