2017-05-24 6 views
0

私は非常に早く慣れています。タイトルに記載されている作業に悩まされています。iOS Swift 3 - パネルタップ後のオーバーレイUIViewを削除します。

私の問題:

私はいくつかの簡単な詳細と申込ボタンからなる、プログラム的に製品ページを構築しています。オファーボタンをタップすると、他の詳細と一緒にビューにオーバーレイが表示されます。 [OK]をクリックすると、オーバーレイが消えます。

オーバーレイを除くすべてが消えない!

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)   
} 

私は、forループの後

overlayView.removeFromSuperview() 

を試してみましたが、私はoverlayView.subviewsが正しく、私は期待して景色で満たされていないことを恐れています。

解決策にもう少し近いところにいても、時間を割いてくださっている方に感謝します。

+0

削除コードが実際に実行されているかどうか確認しましたか? – Spads

+0

overlayViewのサブビューはありませんでした。私はoverlayView.addSubview(blah)がいくつかのサブビューを生成すると思ったが、それはそうではなかった。タグ付きで以下の答えがあなたの時間のためにちょっとしたことをしました – ochhii

答えて

2

サブビューはviewです。 "overlayView"への参照を保持します。ビューは残りますが、参照はありません。

任意の機能ブロックの外側で、クラスレベルの変数を追加します。

var overlayView: UIView! 

を次に、func showOverlay(_ sender: UIButton) {...}の内側に、代わりにlet overlayView =のちょうど既存の変数に代入:

overlayView = UIView(frame: ...) 

ます」 D

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

、あなたがしている:それを削除する準備ができて再one:

+0

これは私が探していたものです。ありがとうございます。私は、var overlayView = UIView()を実行しているクラス変数(少なくとも私は思う)を割り当てていました。しかし、私はそれをoverlayView = UIView(フレーム:...)を行うことによって上書きしたと思いますか?私はここで調整を行いました。 – ochhii

+0

まさに... 'let'や' var'を使うといつでも* new *変数を作成しています。関数のように "lower scope"でそうした場合、スコープの高い変数の代わりに* new *変数が使用されます。あなたはそれが働いてうれしい:) – DonMag

+0

華麗な、あなたの時間ドンに感謝します。 – ochhii

0

は、ここでは同様のスレッドで説明viewWithTag方法を試してください:あなたは、次にように、そのを追加

let overlayView = UIView(frame: ...) 

:あなたはローカル変数 "overlayView" を作成しているfunc showOverlay(_ sender: UIButton) {...}

Swift addsubview and remove it

+0

これはうまくいきました、正しい方向に向いてくれてありがとう! – ochhii

関連する問題