如何在 Swift 中移除檢視的所有子檢視?
在 Swift 中,您可以透過使用迴圈遍歷每個子檢視來移除檢視的子檢視。Swift 提供了一個名為 removeFromSuperview() 的方法來從其父檢視中移除檢視。在本文中,您將學習如何使用此方法以及一些示例。
removeFromSuperview()
此方法屬於 Swift 中的 UIView 類。這可以用於從其父檢視中移除檢視物件。要呼叫此方法,您需要從需要從父檢視中移除的檢視物件呼叫它。
當您在檢視上執行 removeFromSuperview() 時,它會向其父檢視傳送一條訊息,請求將該檢視從其子檢視陣列中移除。這表示父檢視不再保留該檢視,並且如果不存在對它的其他強引用,則可以將其釋放。檢視的 window 屬性也設定為 nil,以表示它不再在螢幕上可見。
語法
以下是使用 removeFromSuperview() 的語法
// create a view object let subView = UIView() // add it to the parent view parentView.addSubview(subView) // ...some other code… // remove this subView from the parent view subView.removeFromSuperview()
在此示例中,建立了一個名為 subView 的 UIView 例項,然後使用 addSubview() 方法將其新增為 parentView 的子檢視。之後,在 subView 上呼叫 removeFromSuperview() 以將其從 parentView 中移除。在執行此程式碼行之後,subView 將不再顯示在螢幕上。它不再是 parentView 的子檢視。
以下是一個包含更多上下文和更詳細的示例
步驟 1 − 建立一個 ViewController 來測試此方法
步驟 2 − 建立一些 UIView 屬性
步驟 3 − 配置 redView 並將其新增到 superView 以及一些約束
步驟 4 − 配置 yellowView 並將其新增到 superView 以及一些約束
示例
import UIKit
class TestController: UIViewController {
// creating some views
let redView = UIView()
let yellowView = UIView()
override func viewDidLoad() {
super.viewDidLoad()
initialSetup()
}
private func initialSetup() {
view.backgroundColor = .white
navigationItem.title = "UIView"
// configuring the redView and adding it to the superView along with some constraints
redView.backgroundColor = .red
redView.translatesAutoresizingMaskIntoConstraints = false
redView.layer.cornerRadius = 6
redView.clipsToBounds = true
view.addSubview(redView)
redView.heightAnchor.constraint(equalToConstant: 150).isActive = true
redView.widthAnchor.constraint(equalToConstant: 150).isActive = true
redView.topAnchor.constraint(equalTo: view.safeAreaLayoutGuide.topAnchor, constant: 100).isActive = true
redView.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true
// configuring the yellowView and adding it to superView along with some constraints
yellowView.backgroundColor = .yellow
yellowView.translatesAutoresizingMaskIntoConstraints = false
yellowView.layer.cornerRadius = 6
yellowView.clipsToBounds = true
view.addSubview(yellowView)
yellowView.heightAnchor.constraint(equalToConstant: 150).isActive = true
yellowView.widthAnchor.constraint(equalToConstant: 150).isActive = true
yellowView.topAnchor.constraint(equalTo: redView.bottomAnchor, constant: 50).isActive = true
yellowView.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true
}
}
輸出
執行上述程式碼後,您將看到兩個子檢視都顯示在主螢幕上。以下是輸出。

如果要移除檢視的所有子檢視但保留檢視本身,您可以新增以下程式碼:
func removeAllSubviews() {
// perform a loop to iterate each subView
view.subviews.forEach { subView in
// removing subView from its parent view
subView.removeFromSuperview()
}
}
此程式碼使用 forEach 方法迭代 parentView 的 subviews 陣列並從 parentView 中移除每個子檢視。此程式碼與上一段程式碼的區別在於,它使用閉包在每個子檢視上呼叫 removeFromSuperview(),而不是使用 for 迴圈。
執行上述程式碼後,您將看到兩個子檢視都從主螢幕消失。以下是輸出:

以下是一些更多涉及根據特定條件移除子檢視的示例
示例 1:移除特定型別的全部子檢視
假設您有一個包含多個不同型別子檢視的 parentView,例如 UILabel、UIButton 和 UIImageView。您想要移除所有 UILabel 子檢視。您可以使用以下程式碼來實現此目的:
for case let label as UILabel in parentView.subviews {
label.removeFromSuperview()
}
此程式碼使用帶有 case let 模式匹配語法的 for 迴圈迭代 parentView 的 subviews 陣列。case let 語法檢查每個子檢視是否為 UILabel 的例項。如果子檢視是 UILabel,則呼叫其 removeFromSuperview() 方法將其從 parentView 中移除。
示例 2:移除滿足特定條件的所有子檢視
例如,您有一個包含許多不同型別子檢視的 parentView。您想要移除所有具有特定屬性值的子檢視。例如,假設您想要移除所有標題屬性等於“刪除”的 UIButton 子檢視。您可以使用以下程式碼來實現此目的:
for case let button as UIButton in parentView.subviews where button.title(for: .normal) == "Delete" {
button.removeFromSuperview()
}
此程式碼使用帶有 case let 模式匹配語法和 where 子句的 for 迴圈迭代 parentView 的 subviews 陣列。case let 語法檢查每個子檢視是否為 UIButton 的例項。where 子句檢查按鈕的 title 屬性是否等於“刪除”。如果這兩個條件都為真,則呼叫按鈕的 removeFromSuperview() 方法將其從 parentView 中移除。
結論
總之,在 Swift 中移除檢視的所有子檢視有多種方法。您可以使用 for 迴圈、while 迴圈、guard 語句或遞迴來從檢視層次結構中移除每個子檢視。您選擇的方法將取決於您的特定需求和編碼風格。無論您使用哪種方法,請確保徹底測試您的程式碼以確保其按預期工作。
資料結構
網路
關係型資料庫管理系統
作業系統
Java
iOS
HTML
CSS
Android
Python
C 程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP