如何更改子视图控制器中的后退按钮文本?

时间:2016-08-21 14:33:40

标签: ios swift cocoa-touch

我知道您可以从IB或prepareForSegue设置后退按钮的标题,但在我的应用中,我需要根据控制器可见时可能发生的事件更新标题。

我试过但没有任何反应:

self.navigationItem.backBarButtonItem = UIBarButtonItem(title: title, style: .Plain, target: nil, action: nil)

虽然有效,但没有后退箭头:

self.navigationItem.leftBarButtonItem = UIBarButtonItem(title: title, style: .Plain, target: nil, action: "popVC")

有什么想法吗?

3 个答案:

答案 0 :(得分:2)

backBarButtonItem是用于导航堆栈中 next 控制器后退按钮的项目。
因此,例如,如果您有一个带有根视图控制器A的导航控制器,并且您推送了一个viewController B,那么使用{{{} {{}}推送后看到的后退按钮标题是使用{{ 1}}。

你可以这样:

B

按下A后,您会看到一个带有“返回A”的后退按钮。

在您的情况下,棘手的部分是从A.navigationItem.backBarButtonItem = UIBarButtonItem(title: "Go back to A", style: .Plain, target: nil, action: nil) 在导航堆栈中找到B。 您可以通过搜索A的{​​{1}}来完成此操作:

B

修改

之后我不知道任何 clean 刷新导航栏的方法。也许你可以就此问一个单独的问题 你可以做的是弹出并推动视图控制器没有动画

viewControllers

或者尝试创建新的navigationController,而不是更改现有的标题。

答案 1 :(得分:0)

试试这个:

let baritems = self.navigationController?.navigationBar.items

        for item in baritems!{
            if (item.leftBarButtonItem != nil){
                item.title = "123"
            }
        }

答案 2 :(得分:0)

这个问题现在已经很老了,但我在基于嵌套的tableViewController所选单元格更改后退按钮文本时遇到了问题。

看起来,navigationViewController的默认后退按钮将其文本基于用户返回的视图控制器的标题。

你可能应该小心,因为我的解决方案做了一些假设,我不肯定是永远的。

let vcs = navigationController?.viewControllers
vcs?[(vcs?.count)! - 2].navigationItem.title = "Your Text Here"

假设我们当前的视图控制器位于导航堆栈的顶部 - > vcs [vcs.count - 1];在此堆栈之前存在一个视图控制器 - > vcs [vcs.count - 2];并且可以更改前一个视图控制器的navigationItem.title而不会产生不必要的副作用;我们可以通过更改前一个视图控制器的导航标题来更改后退按钮文本。