2014-11-21 3 views
5

Ich verwende eine For-Schleife, um Labels und Schaltflächen in meinem scrollView zu erstellen. Ist es möglich, alle Objekte in meinem scrollView zu entfernen? (Ich möchte es mit neuem Inhalt aktualisieren)Subviews von ScrollView Swift entfernen

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

Antwort

18

Haben Sie das versucht?

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

Dank! :) Ich war auf der Suche nach removeFromSuperview()! Klappt wunderbar! – Heinevolder

+1

Das funktionierte für mich, wenn ich nur die zuletzt hinzugefügte Unteransicht entfernen wollte: 'let subViews = self.viewnviews' ' subViews.last? .removeFromSuperview() ' – Andrej

1

Sie können dies tun, mit Block-Ansatz,

let views: NSArray = scroller.subviews 

// 3 - remove all subviews 
views.enumerateObjectsUsingBlock { 
(object: AnyObject!, idx: Int, stop: UnsafeMutablePointer<ObjCBool>) -> Void in 
    object.removeFromSuperview() 
} 
15

Eine Linie Lösung verwenden

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

AKTUALISIERT

nur für bestimmte Art von Ansicht zu entfernen, sagen UIButton verwenden Sie

scrollView.subviews.forEach ({ ($0 as? UIButton)?.removeFromSuperview() }) 
+0

Wie könnte ich eine Art von Klasse beurteilen (wie: UIButton) auf diese Weise zu löschen? –

+0

@WilliamHu Siehe meine bearbeitete Antwort. – itsji10dra

1

Das Entfernen einer Menge von Objekten aus verschiedenen Klassen kann mit Tags erfolgen. Legen Sie das Tag beim Erstellen der Objektgruppe fest.

label.tag = 99 

Nun, wenn die Objekte zu entfernen, verwenden Sie:

func removeLabels() { 
    let subViews = self.view.subviews 
    for subview in subViews { 
     if subview.tag == 99 { 
      subview.removeFromSuperview() 
     } 
    } 
}