如何在 Swift 中设置返回按钮文本?
默认情况下,iOS 中的视图控制器会在返回按钮上显示带有箭头的"返回"文本。但您可以为返回按钮项设置自定义标题和图标。让我们看一个示例,了解如何在 Swift 中设置自定义返回按钮文本。
在此示例中,我们将设置两个不同的视图控制器,以查看返回按钮的默认行为以及如何设置自定义返回按钮文本。
第一个视图控制器设置
在此步骤中,我们将设置第一个视图控制器以推送第二个视图控制器。以下是第一个视图控制器的代码。
示例
import UIKit
class FirstViewController: UIViewController {
private let clickButton = UIButton()
override func viewDidLoad() {
super.viewDidLoad()
initialSetup()
}
private func initialSetup() {
// 基本设置
view.backgroundColor = .white
navigationItem.title = "第一个控制器"
// 按钮自定义
clickButton.backgroundColor = .darkGray
clickButton.setTitle("Go to next controller", for: .normal)
clickButton.setTitleColor(.white, for: .normal)
clickButton.layer.cornerRadius = 8
clickButton.addTarget(self, action: #selector(handleClickButtonTapped), for: .touchUpInside)
// 为按钮添加约束
view.addSubview(clickButton)
clickButton.translatesAutoresizingMaskIntoConstraints = false
clickButton.heightAnchor.constraint(equalToConstant: 50).isActive = true
clickButton.widthAnchor.constraint(equalToConstant: 250).isActive = true
clickButton.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true
clickButton.centerYAnchor.constraint(equalTo: view.centerYAnchor).isActive = true
}
@objc private func handleClickButtonTapped() {
let secondController = SecondViewController()
self.navigationController?.pushViewController(secondController, animated: true)
}
}
输出
第二个视图控制器设置
在此步骤中,我们将设置第二个视图控制器。首先,我们将查看返回按钮的默认行为。以下是设置第二个视图控制器的代码。
示例
import UIKit
class SecondViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
initialSetup()
}
private func initialSetup() {
// basic setup
view.backgroundColor = .white
navigationItem.title = "Second Controller"
}
}
输出
在上面的输出中,您可以看到返回按钮的默认样式。要更改返回按钮的文本,您可以按照下一步操作。
设置返回按钮文本
在此步骤中,我们将设置自定义返回按钮文本。要更改返回按钮文本,您可以根据需要创建一个自定义的 UIButton 并进行基本的自定义设置。之后,您可以使用 UIBarButtonItem(customView:) 类来分配自定义返回按钮。以下是使用此方法的代码。
示例
import UIKit
class SecondViewController: UIViewController {
private let backButton = UIButton(type: .system)
override func viewDidLoad() {
super.viewDidLoad()
initialSetup()
}
private func initialSetup() {
// basic setup
view.backgroundColor = .white
navigationItem.title = "Second Controller"
// 按钮自定义
backButton.setImage(UIImage(systemName: "chevron.backward"), for: .normal)
backButton.setTitle("Return", for: .normal)
backButton.titleLabel?.font = UIFont.systemFont(ofSize: 17, weight: .medium)
backButton.addTarget(self, action: #selector(handleBackButtonTapped), for: .touchUpInside)
let backButtonItem = UIBarButtonItem(customView: backButton)
self.navigationItem.leftBarButtonItem = backButtonItem
}
@objc private func handleBackButtonTapped() {
self.navigationController?.popViewController(animated: true)
}
}
输出
在上面的示例中,您可以看到我们如何设置自定义返回按钮文本。您也可以使用自定义按钮类型来自定义返回按钮。
使用 backBarButtonItem 属性
使用此属性,您可以更改从初始视图控制器推送到导航堆栈的所有视图控制器的默认返回按钮文本。您可以按照以下步骤更改默认的返回按钮文本。
步骤 1 − 实现视图控制器的 viewWillAppear 方法。
步骤 2 − 创建一个包含自定义文本的 UIBarButtonItem 对象,并将其赋值给 backBarButtonItem 属性。
步骤 3 − 将 backBarButtonItem 属性赋值给视图控制器类的 navigationItem 属性。
以下是示例
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
self.navigationItem.backBarButtonItem = UIBarButtonItem(title: "Return", style: .plain, target: nil, action: nil)
}
本例中,UIViewController 的 viewWillAppear 方法被重写,并且 navigationItem 属性的 backBarButtonItem 属性被设置,以创建一个带有适当文本的 UIBarButtonItem。通过以这种方式设置 backBarButtonItem 属性,每当此视图控制器移入导航堆栈时,导航栏中显示的返回按钮的文本都会被更改。
所有由 UINavigationController 推送到导航堆栈的 UIViewController 都兼容此方法。如果您使用不同类型的导航,例如标签栏,则需要使用其他技术来更改返回按钮的文本。
结论
您可以使用 UIBarButtonItem(customView:) 类为返回按钮分配一个带有文本的自定义按钮。此类返回一个栏按钮项,并将其分配给视图控制器的 navigationItem 属性。
您还可以使用视图控制器类的 navigationItem.backBarButtonItem 属性为后退按钮设置自定义文本。