Swift 以编程方式返回到上一个ViewController

Swift 以编程方式返回到上一个ViewController

这篇文章解释了如何使用Swift语言以编程方式从一个视图控制器返回。你会看到一个使用popViewController方法回到前一个控制器的例子。

什么是Swift中的ViewController

在Swift中,UIViewController管理着用户界面和逻辑数据之间的交互。它负责处理用户与用户界面的交互。这个类是UIKit框架的一部分,它提供了一些功能和属性以及一个生命周期。这个类是iOS开发中最常用的类。

要回到之前的视图控制器,导航控制器为我们提供了一个名为popViewController(animated: true)的函数。在Swift中,你可以用以下方式调用这个方法 −

navigationController?.popViewController(animated: 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() {

   }
}

输出

在Swift中以编程方式返回到上一个ViewController

在上面的代码中,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() {

   }
}

输出

在Swift中以编程方式返回到上一个ViewController

返回到第一个控制器

在上面的代码中,handleBackButtonTapped()函数并不完整。我们将在这个方法中写上回到第一个控制器的代码,如下所示

@objc private func handleBackButtonTapped() {
   navigationController?.popViewController(animated: true)
}

结论

总之,你可以使用popViewController(animated: true)函数以编程方式返回导航。这个函数是由UINavigationController类提供的,用于从导航栈中弹出顶部的视图控制器。

作为一个参数animated,该函数接受一个布尔值,用来对弹出过渡进行动画处理。默认情况下,这个参数为真,并使过渡动画化。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程

Swift 示例