11

I use a for-loop to create labels and buttons inside my scrollView. Is it possible to remove all objects indside my scrollView? (I would like to update it with new content)

for peop in personArray{

        scrollView.clearContent ??????


        // Name label
        var label: UILabel = UILabel()
        label.frame = CGRectMake(8, CGFloat(nameHeight), 183, 21)
        label.backgroundColor = UIColor.whiteColor()
        label.textColor =  UIColor(red: 90/255.0, green: 187/255.0, blue: 206/255.0, alpha: 1.0)
        label.textAlignment = NSTextAlignment.Left
        label.font = UIFont (name: "HelveticaNeue-Light", size: 14)
        label.text = " \(peop.getName()) - \(sex)"
        self.scrollView.addSubview(label)


        //Delete button
        var button = UIButton.buttonWithType(UIButtonType.System) as UIButton
        button.tag = playerId
        button.frame = CGRectMake(199, CGFloat(nameHeight), 37, 21)
        button.backgroundColor = colorWheel.colorsArray[7]
        button.setTitle("Slet", forState: UIControlState.Normal)
        button.addTarget(self, action: "delAction:", forControlEvents: UIControlEvents.TouchUpInside)
        button.setTitleColor(UIColor.whiteColor(), forState: UIControlState.Normal)
        self.scrollView.addSubview(button)
        button.titleLabel!.font = UIFont(name: "HelveticaNeue-Light", size: 14)


        scrollHeight = scrollHeight + 29
        nameHeight = nameHeight + 29
        playerId++
    }
    scrollView.contentSize = CGSize(width: 20.0, height: CGFloat(nameHeight))
}

func delAction(sender: UIButton!){
    personArray.removeAtIndex(sender.tag)
    updatePeople()
}
Ali Abbas
  • 4,247
  • 1
  • 22
  • 40
Heinevolder
  • 298
  • 2
  • 5
  • 17

3 Answers3

28

Have you tried this ?

let subViews = self.scrollView.subviews
for subview in subViews{
    subview.removeFromSuperview()
}
Ali Abbas
  • 4,247
  • 1
  • 22
  • 40
  • Thanks! :) i was looking for removeFromSuperview()! Works like a charm! – Heinevolder Nov 21 '14 at 15:57
  • 1
    This worked for me, if looking to only remove last added subview: `let subViews = self.view.subviews` `subViews.last?.removeFromSuperview()` – Andrej Jun 15 '15 at 22:09
28

One line solution, use

scrollView.subviews.forEach({ $0.removeFromSuperview() })

UPDATED

For removing only specific kind of view, say UIButton use

scrollView.subviews.forEach ({ ($0 as? UIButton)?.removeFromSuperview() })
itsji10dra
  • 4,603
  • 3
  • 39
  • 59
1

You can do this with block approach,

let views: NSArray = scroller.subviews

// 3 - remove all subviews
views.enumerateObjectsUsingBlock {
(object: AnyObject!, idx: Int, stop: UnsafeMutablePointer<ObjCBool>) -> Void in
  object.removeFromSuperview()
}
Pawan Rai
  • 3,434
  • 4
  • 32
  • 42