如何在Swift中关闭ViewController?
在Swift中,UIViewController类有一个dismiss方法,可以用来关闭ViewController。此方法使用布尔值作为参数。该参数决定是否应该以动画方式关闭控制器。默认情况下,此方法中的值为true。
以下示例演示如何在Swift中关闭UIViewController屏幕。
第一个视图控制器设置
在此步骤中,我们将设置第一个视图控制器以呈现第二个视图控制器。我们将在第一个视图控制器中添加一个按钮,单击该按钮将呈现目标控制器。
示例
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 the constraints to the 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() {
let secondController = SecondViewController()
self.present(secondController, animated: true)
}
}
在上面的代码中,我们在控制器的视图中添加了一个按钮来呈现目标控制器。我们对按钮进行了一些基本的自定义以使其外观更好。自定义后,我们向按钮添加了一些必要的约束。
我们的第二个视图控制器在handleClickButtonTapped方法中创建。接下来是带动画的呈现。
第二个视图控制器设置
在此步骤中,我们将使用基本的用户界面设置第二个视图控制器。在此控制器中,我们将在中心添加一个按钮来关闭控制器(self)。
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("Dismiss", for: .normal)
backButton.setTitleColor(.white, for: .normal)
backButton.layer.cornerRadius = 8
backButton.addTarget(self, action: #selector(handleBackButtonTapped), for: .touchUpInside)
// adding the constraints to the 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() {
self.dismiss(animated: true)
}
}
dismiss方法用于关闭已呈现的视图控制器并导航回已呈现的视图控制器。关闭视图控制器时,您可以指定是否应该以动画方式关闭,并提供一个在关闭完成后执行的完成块。
输出
结论
dismiss方法有两个参数
animated − 一个布尔值,决定是否应该以动画方式关闭。
completion − 一个可选的闭包,在关闭完成后调用。
通过将true传递给animated参数,您要求父视图控制器以动画方式关闭子视图控制器。completion参数是可选的,可以在关闭完成后用于执行其他任务。
广告
数据结构
网络
关系数据库管理系统 (RDBMS)
操作系统
Java
iOS
HTML
CSS
Android
Python
C语言编程
C++
C#
MongoDB
MySQL
Javascript
PHP