首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

iOS 點擊關閉按鈕移除或隱藏 subView

     編輯:程式設計綜合問答

場景

將自訂 UIView 作為子視圖加到主視窗,需在關閉按鈕點擊時移除或隱藏該子視圖。

核心 API

  • removeFromSuperview():從父視圖移除並釋放(若無其他強引用),視圖層級結構中消失。
  • isHidden = true:保留在視圖層級,僅不渲染,佔用記憶體但可快速切換顯示狀態。

程式碼範例

建立並加入 subView

let subView = UIView(frame: CGRect(x: 0, y: 0, width: 1024, height: 768))
subView.backgroundColor = UIColor(patternImage: UIImage(named: "bgPopupback")!)
if let window = UIApplication.shared.keyWindow ?? UIApplication.shared.windows.first {
    window.subviews.first?.addSubview(subView)
}

關閉按鈕動作:移除

@objc func closeButtonAction() {
    subView.removeFromSuperview()
    tableView.isUserInteractionEnabled = true
}

關閉按鈕動作:隱藏(可復用)

@objc func closeButtonAction() {
    subView.isHidden = true
    tableView.isUserInteractionEnabled = true
}

// 再次顯示時
subView.isHidden = false

關鍵注意事項

  1. 持有強引用:subView 必須為類別屬性(或透過 tag 從父視圖查找),否則區域變數離開作用域即被釋放,無法在按鈕事件中操作。
  2. 記憶體管理:removeFromSuperview 會釋放視圖持有的資源(如圖片、子視圖),若頻繁建立/銷毀複雜視圖,考慮隱藏/顯示切換以提升效能。
  3. 視圖層級:範例中加到 window.subviews.first(通常是根視圖控制器的 view),確保彈出層級最高。若需模態效果,建議使用 UIPresentationController 或 UIAlertController 系統方案。
  4. Swift 完整範例(含關閉按鈕建立)

    class PopupManager {
        private weak var hostView: UIView?
        private var popupView: UIView?
    
        func showPopup(in view: UIView) {
            hostView = view
            let popup = UIView(frame: CGRect(x: 50, y: 100, width: 300, height: 200))
            popup.backgroundColor = .white
            popup.layer.cornerRadius = 12
            popup.tag = 999 // 便於查找
    
            let closeBtn = UIButton(type: .system)
            closeBtn.setTitle("關閉", for: .normal)
            closeBtn.frame = CGRect(x: 260, y: 10, width: 30, height: 30)
            closeBtn.addTarget(self, action: #selector(hidePopup), for: .touchUpInside)
            popup.addSubview(closeBtn)
    
            view.addSubview(popup)
            popupView = popup
        }
    
        @objc func hidePopup() {
            popupView?.removeFromSuperview() // 或 popupView?.isHidden = true
            popupView = nil
        }
    }
    

    根據業務需求選擇「移除」或「隱藏」:一次性彈窗用移除,頻繁切換的面板用隱藏。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved