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

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

我试着把下面这行代码放在视图控制器的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
}

其他回答

斯威夫特版本:

在你的子ViewController中:

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

迅速:

    // Rename back button
    let backButton = UIBarButtonItem(
        title: "Back",
        style: UIBarButtonItemStyle.Plain, // Note: .Bordered is deprecated
        target: nil,
        action: nil
    )
    self.navigationController!.navigationBar.topItem!.backBarButtonItem = backButton

我发现最好是在推到下一个视图控制器之前,在导航堆栈中将当前视图控制器的标题更改为后退按钮的所需文本。

例如

self.navigationItem.title = @"Desired back button text";
[self.navigationController pushViewController:QAVC animated:NO];

然后在viewDidAppear中将标题设置回原始VC所需的标题。瞧!

这里解释的解决方案没有一个对我有效。所以我所做的就是从我来自的场景中删除标题,方法如下:

自我。标题= @"";

因此,当新场景呈现时,后面的文本不会出现。

我完全同意,这不是一个明确的解决方案,但工作,没有一个解释对我有效。

以下是答案:

在viewDidAppear:animated中(不是在viewDidLoad中)执行以下操作

- (void)viewDidAppear:(BOOL)animated
{
     [self.navigationController.navigationBar.backItem setTitle:@"anything"];

     // then call the super
     [super viewDidAppear:animated];
}

如果你想保持后退按钮的形状。