如何更改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。
对不起,我没有上传截图。