如何在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