2017-02-13 7 views
0

私は問題に直面しています。他のビューにUILabelを追加するクラスがあります。スーパービューからUILabelを取り除くことができません

クラスです:

class noDataColor{ 

     let errLabel = UILabel() 

     func addNoDataLabel(_ tableView:UITableView, text:String, color: UIColor){ 

     //Err label 

     self.errLabel.frame = CGRect(x: 15, y: 20, width: tableView.bounds.width, height: 60) 
     self.errLabel.textColor = color 
     self.errLabel.text = text 
     self.errLabel.isHidden = false 
     tableView.addSubview(self.errLabel) 
     print("errLabelFrame\(errLabel.frame)") //Prints normal frame 
} 

    func removeNoDataLabelColor(){ 
     //Err label 
      print("Executed") 
      errLabel.isHidden = true 
      errLabel.removeFromSuperview() 
      errLabel.textColor = UIColor.clear 
      print("errLabelFrame\(errLabel.frame)") //Prints (0.0,0.0,0.0,0.0) 
     } 
    } 

そして、私は(すべてが正常に動作し、私のラベルが追加される)、このラインを使用して、私のerrLabelを追加します。

noDataColor().addNoDataLabel(self.tableView, text: errorMessage!, color: .white) 

しかし、ここでは私の問題を来て、このため、行は何もしません:"Executed"を印刷しても、

noDataColor().removeNoDataLabelColor() 

私の質問はです。代理人を使用せずにerrLabelを削除するにはどうしたらいいですか?

注:私はこれらの行をnoDataColorクラスとは異なるクラスで使用します。

ありがとうございました:)

+1

print( "addNoDataLabel Executed")をaddNoDataLabelメソッドに印刷し、呼び出した回数を確認できますか? 私はかなりあなたがaddNoDataLabelを複数回呼び出すと確信しています –

+0

なぜあなたは**自己を使用していますか?** ...? – Fattie

+0

一度だけ呼び出されます:/ –

答えて

1

あなたがあなたのクラスの新しいインスタンスを作成しますnoDataColor()呼び出すたびに。

noDataColor().addNoDataLabel(self.tableView, text: errorMessage!, color: .white) 
noDataColor().removeNoDataLabelColor() 

2行目には、それがaddNoDataLabel(_, text:, color:)と呼ばれていたことのないnoDataColorの新しいインスタンスを作成します。

let noDataColor = noDataColor() 
noDataColor.addNoDataLabel(self.tableView, text: errorMessage!, color: .white) 
noDataColor.removeNoDataLabelColor() 

ご覧のとおり、同じオブジェクトのメソッドを呼び出す必要があります。

+0

それは、感謝:)動作します。 –

関連する問題