2016-09-26 2 views
2

2つのセグメントを持つUISegmentControlによって制御されるUITableViewがあります。iOS:セグメント化されたコントロールの変更時に、プログラムで追加されたサブビューを非表示または削除します。

セグメント1では、いくつかのビューをセルのサブビューに追加して、ビジュアル要素をセルに追加しています。

ユーザーがセグメント2に切り替えたときに、これらのプログラムで追加されたビューを削除します。しかし、それらは持続する!私は、セグメントに2

いくつかのコードを切り替えたときに彼らが消えるように取得する方法を見つけ出すことはできません。私は2番目のセグメントに切り替えた時には、上記のコードでは

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell 
    {  
     let cell = tableView.dequeueReusableCellWithIdentifier("cell", forIndexPath: indexPath) as! ProfilePokemonTableViewCell 

     var views: [String: UIView] = [:] 
     var piechart = Piechart2() 

switch(segmentedControl.selectedSegmentIndex) 
     { 
     case 0: 

     let i:Int = indexPath.row 
     let curItem = self.pokemonAndIds[i]["data"] as! NSDictionary 

     let name = self.pokemonAndIds[indexPath.row]["data"]!!["name"] as! String 

     // MARK: - Add Piechart view programmaticaly 
     var views: [String: UIView] = [:] 
     var error = Piechart2.Slice() 
     error.value = 100 - CGFloat(aveIV) 
     error.color = UIColor.magentaColor() 
     error.text = "Error" 
     var win = Piechart2.Slice() 
     win.value = CGFloat(aveIV) 
     win.color = UIColor(netHex:0x6cedb8) 
     win.text = "Winner" 

     piechart.title = "42" 
     piechart.activeSlice = 1 
     piechart.radius.inner = 12 
     piechart.radius.outer = 23 
     piechart.layer.borderWidth = 0 
     piechart.slices = [error, win] 
     piechart.subtitle = "" 
     piechart.translatesAutoresizingMaskIntoConstraints = false 
     cell.addSubview(piechart) 
     views["piechart"] = piechart 
     cell.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("H:[piechart(==66)]-10-|", options: [], metrics: nil, views: views)) 
     cell.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("V:|-5-[piechart(==66)]", options: [], metrics: nil, views: views)) 

     break 
    case 1: 
     cell.nameLabel.text = self.userFriendList["data"]![indexPath.row]["name"] as! String 

     break  
    default: 
     break 
    } 

を、円グラフの要素が表示されます。私はそれを隠す方法、ビューから削除する方法、削除する方法、またはそれが2番目のセグメントに表示されないようにするために必要なことを理解できません。

答えて

2

cellForRowAtIndexPathメソッドでPiChartオブジェクトを再インスタンス化するときに、画面に表示されるPiChartへの参照がなくなりました。そうだとすれば、この時点でセルに再作成されるべきですが、私はそれが起こらないことを知っていました。これは決して理想的な解決策ではありませんが、疑念を確認するだけの価値があります。

このようなビュー階層に登ることは嫌いですが、オブジェクトへの参照を失った場合は、より良いアプローチになることがあります。

for subview in cell.contentView.subviews { 
    if let pichart = subview as? Piechart2 { 
     pichart.removeFromSuperview() 
    } 
} 
+0

これは1つの編集が必要でした:条件付きの "contentView"を削除しました。おそらく、これはcontentViewの代わりにビューをセルに追加するため、この問題が発生していることを意味します。確認するつもりです... – bflora2

+0

Nope。それは助けに見えなかった。いずれにせよ、これは機能します!本当にありがとう。 – bflora2

+0

問題ありません、あなたの問題を解決してうれしいです! –

関連する問題