在 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,并为转换动画设置动画。

更新于: 2023 年 2 月 28 日

5K+ 次浏览

启动您的 职业生涯

通过完成课程获得认证

开始学习
广告