在 Swift 中以编程方式返回到上一个 ViewController
本文介绍了如何使用 Swift 语言以编程方式从一个视图控制器返回到上一个视图控制器。您将看到一个使用 popViewController 方法返回到上一个控制器的示例。
什么是 Swift 中的 ViewController?
在 Swift 中,UIViewController 管理用户界面和逻辑数据之间的交互。它负责处理用户与用户界面的交互。该类是 UIKit 框架的一部分,并提供了一些函数和属性以及生命周期。此类是 iOS 开发中最常用的类。
要返回到上一个视图控制器,导航控制器为我们提供了一个名为 popViewController(animated: true) 的方法。在 Swift 中,您可以使用以下方法调用此方法:
navigationController?.popViewController(animated: true)
在此函数中,通过传递一个标志来启用或禁用返回到上一个控制器的动画。默认情况下,它处于 true 状态,并且控制器将以动画形式弹出。
在此示例中,我们将创建两个视图控制器,以便使用以下方法以编程方式返回:
步骤 1 - 设置第一个视图控制器。
步骤 2 - 设置第二个视图控制器。
步骤 3 - 编写代码以返回到上一个控制器。
设置第一个控制器
在此第一个控制器中,我们将添加一个按钮,当单击该按钮时,将推送一个新的控制器以便返回。以下是设置控制器的代码。
示例
import UIKit class FirstViewController: UIViewController { private let clickButton = UIButton() override func viewDidLoad() { super.viewDidLoad() initialSetup() } private func initialSetup() { // basic setup view.backgroundColor = .white navigationItem.title = "First Controller" // button customization 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) // adding constraints to button 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() { } }
输出
在上面的代码中,handleClickButtonTapped() 函数尚未完成。我们将在该方法内部编写代码以推送第二个控制器,如下所示:
@objc private func handleClickButtonTapped() { let secondController = SecondViewController() self.navigationController?.pushViewController(secondController, animated: true) }
设置第二个控制器
在此步骤中,我们将设置第二个控制器,以便从第一个控制器推送它。还将添加一个按钮,以便在单击时返回。
示例
import UIKit class SecondViewController: UIViewController { private let backButton = UIButton() override func viewDidLoad() { super.viewDidLoad() initialSetup() } private func initialSetup() { // basic setup view.backgroundColor = .white navigationItem.title = "Second Controller" // button customization backButton.backgroundColor = .darkGray backButton.setTitle("Go Back", for: .normal) backButton.setTitleColor(.white, for: .normal) backButton.layer.cornerRadius = 8 backButton.addTarget(self, action: #selector(handleBackButtonTapped), for: .touchUpInside) // adding constraint to button view.addSubview(backButton) backButton.translatesAutoresizingMaskIntoConstraints = false backButton.heightAnchor.constraint(equalToConstant: 50).isActive = true backButton.widthAnchor.constraint(equalToConstant: 200).isActive = true backButton.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true backButton.centerYAnchor.constraint(equalTo: view.centerYAnchor).isActive = true } @objc private func handleBackButtonTapped() { } }
输出
返回到第一个控制器
在上面的代码中,handleBackButtonTapped() 函数尚未完成。我们将在该方法内部编写代码以返回到第一个控制器,如下所示:
@objc private func handleBackButtonTapped() { navigationController?.popViewController(animated: true) }
结论
总之,您可以使用 popViewController(animated: true) 函数以编程方式导航返回。此函数由 UINavigationController 类提供,用于从导航堆栈中弹出顶部的视图控制器。
作为参数 animated,该函数接受一个布尔值,用于为弹出转换设置动画。默认情况下,此参数为 true,并为转换动画设置动画。