如何在iOS导航控制器中设置返回按钮文本?

251
如何删除返回按钮文本。
当前返回按钮:

< 返回

期望的返回按钮:

< 任何其他

这些都不起作用:
self.navigationItem.backBarButtonItem?.title = "Back"
self.backItem?.title = ""
self.navigationController?.navigationBar.backItem?.title = ""
self.navigationItem.backBarButtonItem?.title = ""
self.navigationController?.navigationItem.backBarButtonItem?.title="Back"
self.navigationController?.navigationBar.backItem?.title = ""
self.navigationController?.navigationItem.backBarButtonItem?.title
28个回答

9
有两种方法。
1.在previousViewController.viewDidLoad()函数中。
let backBarBtnItem = UIBarButtonItem()
backBarBtnItem.title = "back"
navigationItem.backBarButtonItem = backBarBtnItem

2. 在当前视图控制器的viewDidAppear()方法中

let backBarBtnItem = UIBarButtonItem()
backBarBtnItem.title = "back"      
navigationController?.navigationBar.backItem?.backBarButtonItem = backBarBtnItem

原因: backButton 来自于 navigationBar.backItem.backBarButtonItem,所以第一种方法是显而易见的。在 currentViewController.viewDidLoad() 中,我们无法获取 backItem 的引用,因为在 viewDidAppear() 中,navigationBar 在其 stack 中推入了 navigationView。因此,我们可以在 currentViewController.viewDidAppear() 中对 backItem 进行更改。
更多详细信息,请参见文档:UINavigationBar

8

Swift 4 - 在推送任何视图控制器之前配置返回按钮

// if you want to remove the text
navigationItem.backBarButtonItem = UIBarButtonItem()

// if you want to modify the text to "back"
navigationItem.backBarButtonItem = UIBarButtonItem(title: "back", style: .plain, target: nil, action: nil)

6

返回按钮文本和颜色文本:

navigationController?.navigationBar.tintColor = .red
navigationController?.navigationBar.topItem?.backButtonTitle = "Hi"

3

虽然这些答案可以解决问题,但这可能会有一些用处。

class MainNavigatioController: UINavigationController {

    override func pushViewController(_ viewController: UIViewController, animated: Bool) {
        // first
        let backItem = UIBarButtonItem()
        backItem.title = "رجوع"
        self.viewControllers.last?.navigationItem.backBarButtonItem = backItem
        // then
        super.pushViewController(viewController, animated: animated)

    }

}

3
呈现控制器viewDidLoad方法中添加以下内容:
// hide navigation bar title in the next controller
let backButton = UIBarButtonItem(title: "", style:.Plain, target: nil, action: nil)
navigationItem.backBarButtonItem = backButton

3

这对我有用。Swift 5

navigationItem.backButtonTitle = ""

3
需要注意的是,这个内容是在“后面”的VC中,而不是你当前正在查看的VC中。 - Kyle Humfeld

3

Swift 4

虽然之前的说法是准备segue(控制器转换)是正确的,而且返回按钮属于上一个VC(视图控制器),但这只是增加了很多不必要的代码。

最好的做法是在viewDidLoad中设置当前VC的标题(title),这样它会自动在下一个VC中正确设置返回按钮标题。这行代码对我有效:

navigationController?.navigationBar.topItem?.title = "Title"

三年后,这是我在Swift 5中唯一有效的方法。 - elarcoiris

2
这适用于Swift 5
self.navigationItem.backBarButtonItem?.title = ""

请注意,它将对下一个推送的视图控制器有效,而不是当前显示的视图控制器,这就是为什么它非常令人困惑的原因!
此外,请检查故事板并选择“前一个”视图控制器的导航项,然后在“返回按钮”(检查器)中输入一些内容。

1
那没有改变任何东西。这个有效:navigationItem.backButtonTitle = "" - Tilo Delau
它将对下一个推送的视图控制器有效,而不是当前显示的视图控制器。 - Saeed Ir
不,我把它放在任何地方都没用。它返回nil,所以我甚至没有一个。我认为这是针对你自己定制和添加了自己的按钮的情况。我正在操作“真正”的按钮。如果你改变backButtonTitle上的文字,它会对你有任何影响吗?我认为它们是两个不同的东西。 - Tilo Delau

1

Swift 4

在我的情况下,解决方案是在移动到子视图控制器之前清除主视图控制器的导航项。如果再次显示,则再次设置它。

主控制器

override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)
    navigationItem.title = "Master Title"
}

override func viewWillDisappear(_ animated: Bool) {
    super.viewWillDisappear(animated)
    navigationItem.title = ""
}

这是我如何在子控制器中推送UIViewController并清除返回按钮的方法:

主控制器
let childController = ChildController(collectionViewLayout: UICollectionViewFlowLayout())
childController.navigationItem.backBarButtonItem?.title = ""
navigationController?.pushViewController(childController, animated: true)

1

有两种不同的方法来实现那部分,它们是:

1.

navigationItem.backButtonTitle = "Title Goes Here"

(Swift 5)

2.

let backButton = UIBarButtonItem()
backButton.title = "Title Goes Here"
navigationController?.navigationBar.topItem?.backBarButtonItem = backButton

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接