如何更改UINavigationController后退按钮名称?

时间:2012-03-26 11:51:37

标签: ios uiviewcontroller uinavigationcontroller uinavigationitem

我有一个UIViewController,我正在从我的第一个视图控制器导航到第二个视图控制器,我想更改navigationcontroller上显示的按钮的名称以便返回....

SecondViewController *secondController = [[SecondViewController alloc]
                                              initWithNibName:nil
                                              bundle:NULL]; 
[self.navigationController pushViewController:secondController  animated:YES];

现在在第二个viewcontroller我希望更改navigationController中按钮的名称。

17 个答案:

答案 0 :(得分:182)

如果您希望以编程方式执行此操作,可以这样做:

目标C

UIBarButtonItem *backItem = [[UIBarButtonItem alloc] initWithTitle:@"Custom"
                                                             style:UIBarButtonItemStyleBordered
                                                            target:nil
                                                            action:nil];

[self.navigationItem setBackBarButtonItem:backItem];

夫特

let backItem = UIBarButtonItem(title: "Custom", style: .Bordered, target: nil, action: nil)
navigationItem.backBarButtonItem = backItem

但是,如果您更喜欢使用Interface Builder,只需选择要为其设置后退按钮的UINavigationItem,然后导航到属性检查器以更改后退按钮的标题。

enter image description here

注意:重要的是要记住,您必须在视图控制器上配置此功能,您将在点击后退按钮时返回,而不是当前可见的视图控制器。

答案 1 :(得分:42)

在Interface Builder或Storyboarding中有一种简单的方法。在父视图控制器中,只需将导航项的属性“后退按钮”设置为您想要的任何标题。这是一个例子:

Set Back Button Title of child view controller form parent view controller

Villian的Tavern View将“Back”作为Back Button Title,就像我们在父级导航控制器的属性检查器中设置的那样(Best Bars)。

答案 2 :(得分:34)

在viewWillAppear中写这个

self.navigationItem.title = @"List View";

在ViewWilldisapper中写下这个

self.navigationItem.title = @"Back";

它没有故事板。

答案 3 :(得分:4)

斯威夫特3:

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    let backItem = UIBarButtonItem()
    backItem.title = "Back"
    navigationItem.backBarButtonItem = backItem // This will show in the next view controller being pushed
}

注意:后退按钮属于上一个视图控制器,而不是当前在屏幕上显示的控制器。 要修改后退按钮,您应该在推送之前更新它,在启动segue的视图控制器上:

答案 4 :(得分:4)

在我的情况下,它只能在主线程上运行代码,如下所示:

dispatch_async(dispatch_get_main_queue(), ^(void) {

    self.navigationController.navigationBar.backItem.title = @"Custom Title";
});

答案 5 :(得分:2)

Swift 中,我发现解决方案很简单,

假设我在 ViewControllerA 并转到 ViewControllerB ,如果我想更改 ViewControllerB 上显示的后退按钮的名称,我会在 ViewControllerA

中执行此操作
self.title = "BackButtonTitle"

就是这样。

注意: - 这会更改 ViewControllerA 的标题

答案 6 :(得分:1)

如果使用Storyboard引用,View Controller可能不会在Interface Builder上显示导航项。

手动拖动导航栏无效,您需要拖动导航项

然后,您就可以设置其后退按钮的标题。这也是您设置视图标题的地方。

引用Mick MacCallum:

注意:重要的是要记住,您必须在视图控制器上配置此功能,您将在点击后退按钮时返回,而不是当前可见的视图控制器。

答案 7 :(得分:1)

尝试以下代码:

[self.navigationItem setValue:@[@"customTitle",@""] forKey:@"abbreviatedBackButtonTitles"];

答案 8 :(得分:1)

您可以使用titleView

navigationItem来实现此目的

Swift 3回答

•为UINavigationItem创建一个扩展名为

extension UINavigationItem {
    func customTitle(title: String) {
        let titleLabel = UILabel()
        titleLabel.text = title
        titleLabel.textColor = UIColor.white
        titleLabel.textAlignment = .center
        titleLabel.sizeToFit()
        titleView = titleLabel
    }
}

•在您的控制器viewDidLoad中执行以下操作

override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view.
        title = "Text For Back Button"
        navigationItem.customTitle(title: "Title for your view controller")
}

答案 9 :(得分:1)

实际上,您可以更改后退按钮的标题:

self.navigationItem.backBarButtonItem.title = @"NewName";

答案 10 :(得分:1)

非常重要的是,在视图控制器中,“模拟指标”选项未被选为“推断”。

我试过“无”,一切都没错!

答案 11 :(得分:0)

有两种方法可以做到这一点。

第一种方法是程序代码:

Yakimenko Aleksey的回答是最简单的方法, 这确实有效(在Xcode 8 + iOS 10上测试)

Swift3:

self.navigationItem.backBarButtonItem?.title = "Your customized back title"

注意:您应该在源视图控制器中调用上面的代码,而不是目标视图控制器。

第二种方法是通过Main.strings文件使用故事板本地化,

"nnnnnnn.title" = "localized string";

nnnnnnn表示视图控制器(而不是目标视图控制器)中BackBarButtonItem的对象ID。

你需要设置"返回"导航栏项的属性,它将自动创建一个BarButtonItem,找到它的对象id。

抱歉,我无法上传截图。

答案 12 :(得分:0)

如果您使用Storyboard,有一种简单的方法可以做到这一点(它对我来说很好)。

  • 转到您的故事板
  • 选择要更改后退按钮文本的UIViewController。
  • 单击UIViewController顶部的UINavigationItem。 (带标题的那个)
  • 在右侧面板上,选择属性检查器(第4个图标)。
  • 现在您可以设置标题,提示和后退按钮文本。

enter image description here

来源:http://pinkstone.co.uk/how-to-change-the-back-button-text-on-a-uinavigationcontroller-in-your-storyboard/

答案 13 :(得分:0)

我有一个带有许多导航控制器的相当复杂的故事板,而我的客户希望所有的后退按钮都能说出"返回"

我在Interface Builder中进行了操作并将" Back"进入每个UINavigationItem的后退按钮字段。

我没有为每一个场景变化工作!

问题是故事板中的每个视图控制器都有一个UINavigationItem。

我通过将一个新的UINavigationItem拖到没有一个UIViewController的每个UIViewController上,并将Back按钮字段的 all 设置为" Back"

来解决这个问题。

注意没有自动给出自己的UINavigationItem的控制器。

答案 14 :(得分:0)

Swift 4

UIViewController 中,设置:

let backButton = UIBarButtonItem()
backButton.title = "[Your title here]"
self.navigationItem.backBarButtonItem = backButton

答案 15 :(得分:0)

我在ViewController1上,然后转到ViewController2,如果我想更改在ViewController2上显示的后退按钮的名称,我将在ViewController2中进行此操作。

快速5

self.navigationController?.navigationBar.topItem?.title = "BackButtonTitle"

Objective-C

self.navigationController.navigationBar.topItem.title = @"BackButtonTitle";

答案 16 :(得分:0)

在Xcode 12中,UINavigationItem具有backButtonTitle属性

var backButtonTitle: String? { get set }