当前左边栏按钮的默认值是加载当前视图的视图的标题,换句话说,当按下按钮(后退按钮)时显示的视图。

我想把按钮上显示的文本更改为其他内容。

我试着把下面这行代码放在视图控制器的viewDidLoad方法中,但它似乎不起作用。

self.navigationItem.leftBarButtonItem.title = @"Log Out";

我该怎么办?

谢谢。


当前回答

这在Swift 4和iOS 11中都适用。最常见的情况是,当用户点击表视图中的一行,一个新的视图控制器被推送到导航堆栈时,我需要这样做。通常我希望返回按钮是被点击的行所表示的对象的名称或某些属性。我通常在didSelectRowAt中这样做。是这样的:

override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {

    let object = // get the object this row represents

    let backButton = UIBarButtonItem()
    backButton.title = object.name // or whatever
    self.navigationItem.backBarButtonItem = backButton

    // now show or segue to the next view controller
}

其他回答

我有一个父视图控制器,标题很长。这导致后退按钮的文本溢出到子视图控制器的标题中。

在尝试了一堆不同的解决方案后,这就是我最终所做的(扩展@john.k。doe方法):

使用Xcode 7.2, Swift 2

在故事板中,添加一个导航项到父视图控制器场景(不是子VC)

在新导航项的属性检查器上,在后退按钮字段中键入空格字符。稍后再详细介绍。

在父视图控制器中,添加以下代码:

代码片段:

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
    switch segue.destinationViewController {
    case is ChildViewController:
        navigationItem.backBarButtonItem?.title = ""
    default:
        navigationItem.backBarButtonItem?.title = "Full Parent Title"
    }
}

解释:

后退按钮属于父视图控制器。Navigation Item为您提供了返回按钮的句柄,因此您可以在代码或故事板中设置标题。

注意:

如果你保留导航项返回按钮文本为默认空字符串,返回按钮标题将变成“返回”。

其他方法也管用,为什么要用这个呢?:

虽然在子视图控制器上重写back按钮标题是可能的,但在它已经在屏幕上短暂闪烁之前获得它的句柄是一个挑战。

有些方法构造一个新的后退按钮并覆盖现有的后退按钮。我确信它可以工作,并且在某些用例中可能是必要的。但我更喜欢在可能的情况下利用现有的api。

在某些情况下,改变父视图控制器的标题是最快的解决方案。但是,这会改变父标题,因此您必须管理状态。标签栏控制器也会变得混乱,因为标题更改会对标签栏项目标题产生副作用。

斯威夫特版本:

在你的子ViewController中:

override func viewWillAppear(animated: Bool) {
    super.viewWillAppear(animated)
    self.navigationController?.navigationBar.backItem?.title = "TEXT"
}

这段代码也可以工作。把这个放到导航控制器的根控制器上:

self.navigationItem.backBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"" style:UIBarButtonItemStylePlain target:nil action:nil];

这应该放在调用名为NewTitle的ViewController的方法中。 就在push或popViewController语句之前。

UIBarButtonItem *newBackButton = 
        [[UIBarButtonItem alloc] initWithTitle:@"NewTitle" 
                                         style:UIBarButtonItemStyleBordered 
                                        target:nil 
                                        action:nil];
[[self navigationItem] setBackBarButtonItem:newBackButton];
[newBackButton release];

我知道,这个问题很老了,但我找到了一个很好的解决方案。

UIBarButtonItem *barButton = [[UIBarButtonItem alloc] init];
barButton.title = @"Custom Title";
self.navigationController.navigationBar.topItem.backBarButtonItem = barButton;

来自childView的作品!在iOS 7上测试。