iOS:在分段控件更改时隐藏或删除以编程方式添加的子视图

时间:2016-09-26 11:10:01

标签: ios swift uitableview uiview uisegmentedcontrol

我有一个由UISegmentControl控制的UITableView,有两个段。

在第1段中,我以编程方式向细胞子视图添加一些视图,以向细胞添加一些视觉元素。

当用户切换到第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   
    }

在上面的代码中,当我切换到第二段时,会出现Piechart元素。我无法弄清楚如何隐藏它,从视图中删除它,删除它,或任何需要使它不出现在第二段。

1 个答案:

答案 0 :(得分:2)

当您在for subview in cell.contentView.subviews { if let pichart = subview as? Piechart2 { pichart.removeFromSuperview() } } 方法中重新实现PiChart对象时,您不再具有可在屏幕上看到的PiChart的引用。说这个,应该在这一点重新创建,但我知道不会发生。虽然这不是一个理想的解决方案,但值得尝试以确认怀疑。

尽管我讨厌像这样进入视图层次结构,如果你丢失了对象的引用,它有时可能是更好的方法。

  *{-webkit-transition: all 0ms ease !important; transition: all 0ms ease!important;}