当前左边栏按钮的默认值是加载当前视图的视图的标题,换句话说,当按下按钮(后退按钮)时显示的视图。
我想把按钮上显示的文本更改为其他内容。
我试着把下面这行代码放在视图控制器的viewDidLoad方法中,但它似乎不起作用。
self.navigationItem.leftBarButtonItem.title = @"Log Out";
我该怎么办?
谢谢。
当前左边栏按钮的默认值是加载当前视图的视图的标题,换句话说,当按下按钮(后退按钮)时显示的视图。
我想把按钮上显示的文本更改为其他内容。
我试着把下面这行代码放在视图控制器的viewDidLoad方法中,但它似乎不起作用。
self.navigationItem.leftBarButtonItem.title = @"Log Out";
我该怎么办?
谢谢。
当前回答
下面是backBarButtonItem的文档:
时,此导航项位于顶部项的正下方 堆栈时,导航控制器派生返回按钮 此导航项中的导航栏。[…如果你想的话 为后退按钮指定自定义图像或标题,则可以指定 自定义栏按钮项目(与您的自定义标题或图像)到此 财产。”
视图控制器A(父视图控制器):
self.title = @"Really Long Title";
UIBarButtonItem *backButton = [[UIBarButtonItem alloc] initWithTitle:@"Short" style:UIBarButtonItemStyleBordered target:nil action:nil];
self.navigationItem.backBarButtonItem = backButton;
当任何其他视图控制器B在导航堆栈的顶部,而A在它的正下方时,B的后退按钮的标题将是“Short”。
其他回答
这对我来说是以前发布的答案的“简化”版本。
UIBarButtonItem *backButton = [[UIBarButtonItem alloc] init];
backButton.title = @"Go Back";
self.navigationItem.backBarButtonItem = backButton;
记住把代码放在父视图控制器(例如,有你的表格视图或UITableViewController的视图),而不是子视图或细节视图(例如,UIViewController)。
你可以像这样简单地本地化返回按钮字符串:
backButton.title = NSLocalizedString(@"Back Title", nil);
我在iOS新,但我会提供我的覆盖导航控制器类的非常简单的答案。 我有简单的覆盖推和弹出方法,并保存以前的视图控制器的标题。抱歉在js block中进行了粘贴。有点困惑如何过去它在正常的代码块。
#import "MyCustomNavController.h" @implementation MyCustomNavController { NSString *_savedTitle; } - (void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated withBackBtnTitle:(NSString *)title { _savedTitle = self.topViewController.title; self.topViewController.title = title; [super pushViewController:viewController animated:animated]; } - (UIViewController *)popViewControllerAnimated:(BOOL)animated { [self.viewControllers objectAtIndex:self.viewControllers.count - 2].title = _savedTitle; return [super popViewControllerAnimated:animated]; } @end
UIBarButtonItem *btnBack = [[UIBarButtonItem alloc]
initWithTitle:@"Back"
style:UIBarButtonItemStyleBordered
target:self
action:@selector(OnClick_btnBack:)];
self.navigationItem.leftBarButtonItem = btnBack;
[btnBack release];
斯威夫特4 iOS 11.2 Xcode 9.2
TableViewController1 ---segue---> TableViewController2
你可以在TableViewController1或TableViewController2中更改返回按钮的文本。
更改TableViewController1内部的返回按钮文本:
1)在viewWillAppear():
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
let myBackButton = UIBarButtonItem()
myBackButton.title = "Custom text"
navigationItem.backBarButtonItem = myBackButton
}
由于某种原因,viewDidLoad()还太早,不能将后退按钮添加到NavigationItem中。要连接两个tableviewcontroller,在storyboard控件中,从TableViewController1中的TableViewCell拖到TableViewController2的中间,然后在弹出菜单中选择Selection Segue > Show。
2)在tableView(_:didSelectRowAt:):
override func tableView(_ tableView: UITableView, didSelectRowAt: IndexPath) {
let myButton = UIBarButtonItem()
myButton.title = "Custom text"
navigationItem.backBarButtonItem = myButton
performSegue(withIdentifier: "ShowMyCustomBackButton", sender: nil)
}
要连接两个tableviewcontroller,在storyboard控件中,从TableViewController1上面的黄色小圆圈拖到TableViewController2中间,然后从弹出菜单中选择Manual Segue > Show。然后选择连接两个TableViewControllers的segue,在属性检查器中“Identifier”旁边输入“ShowMyCustomBackButton”。
3)在故事板中:
如果你只是需要静态的自定义文本返回按钮,为TableViewController1选择NavigationItem(它在故事板的目录表中有一个<图标),然后打开属性检查器,在“back button”字段中输入你的自定义文本(确保从该字段中tab出来,更改生效)。
更改TableViewController2内部的返回按钮文本:
1)在viewWillAppear():
class MySecondTableViewController: UITableViewController {
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
let myBackButton = UIBarButtonItem(
title: "<Custom text",
style: .plain,
target: self,
action: #selector(goBack) //selector() needs to be paired with an @objc label on the method
)
navigationItem.leftBarButtonItem = myBackButton
}
@objc func goBack() {
navigationController?.popViewController(animated: true)
}
要连接两个tableviewcontroller,在storyboard控件中,从TableViewController1中的TableViewCell拖到TableViewController2的中间,然后在弹出菜单中选择Selection Segue > Show。
使用下面的代码行:
UIBarButtonItem *newBackButton =
[[UIBarButtonItem alloc] initWithTitle:@"hello"
style:UIBarButtonItemStylePlain
target:nil
action:nil];
self.navigationItem.leftBarButtonItems =[[NSArray alloc] initWithObjects:newBackButton, nil];
self.navigationItem.leftItemsSupplementBackButton = YES;