2017-12-22 10 views
0

私のviewWillAppear()でラベルを作成し、タグを付けます。別の条件が満たされると、ラベルを削除しようとしますが、なんらかの理由でそれが機能していないため、ラベルがまだ表示されています。私は私が作成していないよように私は0のデフォルトのタグを持つ新しいラベルを作成していたlabel = UILabel(frame: CGRect(x: 0, y: self.view.frame.height/3, width: self.view.frame.width, height: 100))label?.frame = CGRect(x: 0, y: self.view.frame.height/3, width: self.view.frame.width, height: 100)にそれを変更し、このラインでは実現しませんでした...タグ付きのビューを見つけることができません

override func viewWillAppear(_ animated: Bool) { 
    super.viewWillAppear(animated) 

    var label: UILabel? 

    // Add label if there are no recipes 
    if (recipeBook.recipesArr.count == 0) { 

     label = self.view.viewWithTag(123) as? UILabel 
     //label?.tag = 123 // arbitrary num 

     label = UILabel(frame: CGRect(x: 0, y: self.view.frame.height/3, width: self.view.frame.width, height: 100)) 
     label?.text = "Add A Recipe" 
     label?.textColor = UIColor(red:0.93, green:0.92, blue:0.92, alpha:1.0) 
     label?.font = label?.font.withSize(36) 
     label?.textAlignment = .center 

     self.view.addSubview(label!) 
    } 

    else { 

     // remove it 
     if let foundLabel = self.view.viewWithTag(123) { 
      foundLabel.removeFromSuperview() 
     } else { 
      print("Couldn't find label with tag in view") 
     } 

    } 

} 

を間違った何かをしなければなりません新しいラベルとすべてがうまくいきます。愚かな間違い。

+0

あなたは 'viewWillAppear'のタグでラベルを取得しています。次の行にデフォルトタグ0の新しい' UILabel'インスタンスを上書きします。何を期待していますか? – vadian

答えて

0

あなたのコードは、あなたが思っていることを実行していません。 recipesArrが空の場合(または正確にカウントがゼロの場合)、タグ123を持つラベル/ビューを検索しようとしています。それは無視され、新しいラベルを作成しますが、タグを付けません。あなたがする必要がどのような

は、あなたがこのようにそれを作成した後、あなたがタグ123を作成したラベルを割り当てます:

label?.tag = 123 

次に、あなたはそれがその後見つけることができるので、それはタグのラベルを作成し、設定しています。あなたが行label = UILabel(frame: CGRect

後にラベルを再作成している

+0

ああありがとうございます。私の中のnoobは、私がUILabel(フレーム:CGRect(...))でラベルを作成する方法を理解していなかったので、新しいラベルが作成されます。 –

0

あなたはoptionalsせずに、プログラムでそのようにラベルを作成することができます。

lazy var recipeLabel: UILabel = { 
    let label = UILabel(frame: CGRect(x: 0, y: self.view.frame.height/3, width: self.view.frame.width, height: 100)) 
    label.tag = 123 
    label.text = "Add A Recipe" 
    label.font = UIFont.systemFont(ofSize: 17.0) 
    label.translatesAutoresizingMaskIntoConstraints = false 
    return label 
}() 

その後、iOS 9+ constraints if neededであなたのサブビューに追加:

self.view.addSubview(recipeLabel) 

ビューrecipeLabelまたはを参照するだけで、どこでもビューにアクセスできますあなたが望むならば、のプロパティ。

関連する問題