如何在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引數是可選的,可以在關閉完成後用於執行其他任務。

更新於:2023年3月27日

4K+ 次瀏覽

啟動您的職業生涯

完成課程後獲得認證

開始學習
廣告