Heinevolder
Heinevolder

Reputation: 338

Remove subviews from ScrollView Swift

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()
}

Upvotes: 11

Views: 18279

Answers (4)

Jack
Jack

Reputation: 14329

Swift 5.9

We can use below code if we want to remove specific object otherwise we can directly use currentView.removeFromSuperview()

for currentView in scrollView.subviews where currentView is UIButton {
  currentView.removeFromSuperview()
}

Upvotes: 0

itsji10dra
itsji10dra

Reputation: 4675

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() })

Upvotes: 28

Pawan Rai
Pawan Rai

Reputation: 3444

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()
}

Upvotes: 1

Ali Abbas
Ali Abbas

Reputation: 4277

Have you tried this ?

let subViews = self.scrollView.subviews
for subview in subViews{
    subview.removeFromSuperview()
}

Upvotes: 28

Related Questions