如何更改UINavigationController后退button名称?

我有一个UIViewController ,我从我的第一个视图控制器导航到第二个视图控制器,我想改变导航控制器上显示的button的名称回去….

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

现在在第二个viewcontroller我想改变在navigationController中的button的名称。

有鉴于此,请先写下

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

在ViewWilldisapper中写这个

 self.navigationItem.title = @"Back"; 

它没有故事板的作品。

如果你想以编程的方式做到这一点,可以这样做:

Objective-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,只需select您希望设置后退button的UINavigationItem,然后导航到属性检查器以更改后退button的标题。

在这里输入图像说明

注:重要的是要记住,您必须在视图控制器上configuration此选项,您将在点击后退button而不是当前可见的视图控制器时返回。

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

设置后退按钮子视图控制器表单父视图控制器的标题

Villian的酒馆视图将有“返回”作为后退button标题,就像我们刚在父级的导航控制器(最佳酒吧)的属性检查器中设置。

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

 dispatch_async(dispatch_get_main_queue(), ^(void) { self.navigationController.navigationBar.backItem.title = @"Custom Title"; }); 

Swift中,我发现解决scheme非常简单,

假设我在ViewControllerA和ViewControllerB,如果我想更改显示在ViewControllerB上的后退button的名称,我会在ViewControllerA中执行此操作,

 self.title = "BackButtonTitle" 

而已。

Swift 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 } 

注:后退button属于前一个视图控制器,而不是当前在屏幕上显示的那个。 要修改后退button,您应该在启动segue的视图控制器上进行更新:

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

我尝试了“无”,一切都是正确的!

像这样尝试:

 NSArray *viewControllerArr = [self.navigationController viewControllers]; // get index of the previous ViewContoller long previousViewControllerIndex = [viewControllerArr indexOfObject:self] - 1; UIViewController *previous; if (previousViewControllerIndex >= 0) { previous = [viewControllerArr objectAtIndex:previousViewControllerIndex]; previous.navigationItem.backBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"Back" style:UIBarButtonItemStylePlain target:self action:nil]; } 

你可以通过使用titleView来实现这一点

Swift 3答案

•为UINavigationItem创build一个扩展,如下所示

 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") } 

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

  • 去你的故事板
  • select你想要更改后退button文本的UIViewController。
  • 点击UIViewController顶部的UINavigationItem。 (有标题的那个)
  • 在右侧面板上,select属性检查器(第4个图标)。
  • 现在您可以设置标题,提示和返回button文本。

在这里输入图像说明

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

其实你可以改变后退button的标题

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

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

手动拖动导航栏将不起作用,您需要拖动导航项目

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

引用Mick MacCallum:

注:重要的是要记住,您必须在视图控制器上configuration此选项,您将在点击后退button而不是当前可见的视图控制器时返回。

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

第一种方法是通过程序代码:

Yakimenko Aleksey的答案是最简单的方法,这真的很有效(在Xcode 8 + iOS 10上testing)

Swift3:

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

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

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

 "nnnnnnn.title" = "localized string"; 

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

您需要设置导航栏项目的“后退”属性,它会自动创build一个BarButtonItem,你会发现它的对象ID。

对不起,我没有上传截图。