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() {
}
}
输出
在上面的代码中,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,该函数接受一个布尔值,用来对弹出过渡进行动画处理。默认情况下,这个参数为真,并使过渡动画化。