2017-06-22 3 views
1

私はvar progressBarというUIView変数を宣言します:UIView?removeFromSuperview()は常に動作しない

と私は

func showProgressBar(showBar: Bool){ 
if showBar{ 
      let viewHeight = view.frame.size.height 
      progressBar = Bundle.main.loadNibNamed("progressBar", owner: nil, options: nil)?.first as? UIView 
      progressBar?.frame = CGRect(x: 0, y: viewHeight - 80 , width: self.view.frame.width, height: 80) 
      if let bar = progressBar{ 
       self.view.addSubview(bar) 
      } 
     }else{ 
      DispatchQueue.main.async() { 
       self.progressBar?.removeFromSuperview() 
      } 
     } 

この機能でそれを表示したり、表示を隠す私は、ビュー間のビットをナビゲートする際に時々私はself.progressBar?.removeFromSuperview()が実行された場合でも、プログレスバーを非表示にすることはできませんよ。ビューが古いプログレスバーへの参照を失ったように見えます...あなたはその問題についてのアイディアを持っていて、どのように修正することができますか?

+0

else condで直接progressBarを削除してみます。 DispathQueue.main.async()で削除する必要はないと思います。 –

+0

DispatchQueue.main.async()を追加して問題が解決するかどうかを確認しました。それがなければ問題は残る。 –

+0

progressBarが非表示になっていますか? –

答えて

1

progressBarを表示して非表示にしたい場合は、self.progressBar.hidden = true/falseを使用してください。そのようにすれば、もう一度使用しないとprogressBarを一度、removeFromSuperviewを作成することができます。

func showProgressBar(showBar: Bool){ 
    if showBar { 
     // Check this first 
     if progressBar == nil { 
      let viewHeight = view.frame.size.height 
      progressBar = Bundle.main.loadNibNamed("progressBar", owner: nil, options: nil)?.first as? UIView 
      progressBar?.frame = CGRect(x: 0, y: viewHeight - 80 , width: self.view.frame.width, height: 80) 
      if let bar = progressBar { 
       self.view.addSubview(bar) 
      } 
     } 
    } else { 
     DispatchQueue.main.async() { 
      self.progressBar?.removeFromSuperview() 
     } 
    } 
} 
+0

私はそれについて考えましたが、progressBarは非常にユーザにほとんど表示されませんでしたので、パフォーマンスの観点からは、常にアプリケーションに隠されているとは思いませんでした。 –

+0

新しいprogressBar既存のものはまだそこにあるのです。新しいものを作成する前に、まずそれが割り当て解除されているかどうかチェックする必要があります。 – Lawliet

+0

ありがとうございます。 ProgressBarをシングルトンとして作ることも意味がありますか? –

3

あなたが二回showProgressBarを呼び出している場合、バーがすでに存在しないことを検証していないので、あなたは、第1を追加し、最初の1への参照を失うことができます。従って、あなたがそれを取り除くと、それはちょうど2つ目を取り除き、うまくいきません。

関連する問題