簡體   English   中英

iOS Swift 3-面板點擊后刪除疊加式UIView

[英]iOS Swift 3 - Remove Overlay UIView after Panel Tap

我是新手,很快就完成了標題中描述的任務。

我的問題:

我正在以編程方式構建一個產品頁面,其中包含一些簡單的細節和一個報價按鈕。 點擊要約按鈕會在視圖上顯示一個疊加層以及其他一些細節。 您單擊“確定”,並且覆蓋消失。

一切都好,除了覆蓋不會消失!

我嘗試過的

func hideOverlay(_ sender: UIButton) {
    containerView.backgroundColor = UIColor.white
    buttonView.backgroundColor = UIColor.white
    for subview in overlayView.subviews {
        subview.removeFromSuperview()
    }
}

通過在overlayView中點擊按鈕來調用函數。 我將包括showOverlay函數(工作)。

func showOverlay(_ sender: UIButton) {
    //Load overlay view
    let overlayHeight : CGFloat = 500
    let overlayWidth : CGFloat = 290
    let overlayView = UIView(frame: CGRect(x: centreView(masterView: view.frame.width, subView: overlayWidth), y: 64 + centreView(masterView: (view.frame.height - 64), subView: overlayHeight), width: overlayWidth, height: overlayHeight))
    overlayView.backgroundColor = UIColor.white

    let overlayTitle = UILabel(frame: CGRect(x: 0, y: 0, width: overlayWidth, height: overlayHeight*1/5))
    overlayTitle.text = "Offer Taken"
    overlayTitle.font = UIFont.boldSystemFont(ofSize: 35)
    overlayTitle.textAlignment = .center
    overlayView.addSubview(overlayTitle)

    let overlayButtonView = UIView(frame: CGRect(x: 0, y: 0 + (overlayHeight * 4/5), width: overlayWidth, height: overlayHeight * 1/5))
    overlayButtonView.backgroundColor = UIColor.red

    let buttonWidth : CGFloat = 100
    let buttonHeight : CGFloat = 35
    let overlayButton = UIButton(type: UIButtonType.system)
    overlayButton.frame = CGRect(x: centreView(masterView: overlayWidth, subView: buttonWidth), y: overlayButtonView.frame.origin.y + centreView(masterView: overlayButtonView.frame.height, subView: buttonHeight), width: buttonWidth, height: buttonHeight)
    overlayButton.backgroundColor = UIColor.blue
    overlayButton.setTitle("OK",for: .normal)
    overlayButton.setTitleColor(UIColor.white, for: .normal)
    overlayButton.setTitle("Offer Taken", for: .highlighted)
    overlayButton.setTitleColor(UIColor.white, for: .highlighted)
    overlayButton.addTarget(self, action: #selector(self.hideOverlay(_:)), for: .touchUpInside)
    overlayView.addSubview(overlayButtonView)
    overlayView.addSubview(overlayButton)

    containerView.backgroundColor = UIColor(colorLiteralRed: 0, green: 0, blue: 0, alpha: 0.5)
    buttonView.backgroundColor = UIColor(colorLiteralRed: 0, green: 0, blue: 0, alpha: 0.5)
    view.addSubview(overlayView)        
}

我努力了

overlayView.removeFromSuperview()

在for循環之后,但是我擔心overlayView.subviews不能正確填充我期望的視圖。

我感謝任何人花時間為我提供幫助,即使離解決方案更近一點。

func showOverlay(_ sender: UIButton) {...}您正在創建一個局部變量“ overlayView”:

let overlayView = UIView(frame: ...)

然后,將其添加為要view的子view 一切都很好,除非您不保留對“ overlayView” ..視圖的引用,但您沒有對其的引用。

在任何功能塊之外添加一個類級變量:

var overlayView: UIView!

然后,在func showOverlay(_ sender: UIButton) {...} ,而不是let overlayView =而是將其分配給現有變量:

overlayView = UIView(frame: ...)

准備刪除它時:

func hideOverlay(_ sender: UIButton) {
    overlayView.removeFromSuperview()
}

你完成了:)

嘗試在類似線程中描述的viewWithTag方法:

Swift addsubview並將其刪除

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM