在 Swift 中以程式設計方式返回到上一個 ViewController


本文介紹瞭如何使用 Swift 語言以程式設計方式從一個檢視控制器返回到上一個檢視控制器。您將看到一個使用 popViewController 方法返回到上一個控制器的示例。

什麼是 Swift 中的 ViewController?

在 Swift 中,UIViewController 管理使用者介面和邏輯資料之間的互動。它負責處理使用者與使用者介面的互動。該類是 UIKit 框架的一部分,並提供了一些函式和屬性以及生命週期。此類是 iOS 開發中最常用的類。

要返回到上一個檢視控制器,導航控制器為我們提供了一個名為 popViewController(animated: true) 的方法。在 Swift 中,您可以使用以下方法呼叫此方法:

navigationController?.popViewController(animated: true)

在此函式中,透過傳遞一個標誌來啟用或停用返回到上一個控制器的動畫。預設情況下,它處於 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,該函式接受一個布林值,用於為彈出轉換設定動畫。預設情況下,此引數為 true,併為轉換動畫設定動畫。

更新於: 2023 年 2 月 28 日

5K+ 次瀏覽

啟動您的 職業生涯

透過完成課程獲得認證

開始學習
廣告

© . All rights reserved.