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

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

我试着把下面这行代码放在视图控制器的viewDidLoad方法中,但它似乎不起作用。

self.navigationItem.leftBarButtonItem.title = @"Log Out";

我该怎么办?

谢谢。


当前回答

斯威夫特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。

其他回答

在Xcode 4.5中使用storyboard,到目前为止,当Back按钮的值不需要动态改变时,我发现最简单的解决方案是使用“Back button”字段与视图控制器的导航项相关联,你想让“Back”按钮表示其他内容。

例如,在下面的截图中,我想要视图控制器的后退按钮(s),我推有“后退”作为后退按钮的标题。

当然,如果你每次都需要返回按钮显示稍微不同的内容,这就行不通了……这里有所有其他的解决方案。

我在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

self.navigationItem.backBarButtonItem = [[[UIBarButtonItem alloc] 
                                              initWithTitle:@"Log out" 
                                              style:UIBarButtonItemStyleDone 
                                              target:nil 
                                              action:nil] autorelease];

你可以把它放在父控制器代码中的任何你喜欢的地方,这允许你为不同的子视图有不同的后退按钮。

self.navigationController.navigationBar.backItem.title = @"TEXT";

在Swift中:

self.navigationController?.navigationBar.backItem?.title = "TEXT"

导航控制器似乎在寻找

previousViewController.navigationItem.title

如果没有,它就会去找

previousViewController.title