2014-11-21 3 views
5

Uso un ciclo for per creare etichette e pulsanti all'interno della mia scrollView. È possibile rimuovere tutti gli oggetti dalla mia scrollView? (Vorrei aggiornarlo con nuovi contenuti)Rimuovi sottoview da ScrollView Swift

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

risposta

18

Hai provato questo?

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

Grazie! :) stavo cercando removeFromSuperview()! Funziona come un fascino! – Heinevolder

+1

Questo ha funzionato per me, se si desidera rimuovere solo l'ultima sottoview aggiunta: 'lasciare subViews = self.view.subviews' ' subViews.last? .removeFromSuperview() ' – Andrej

1

È possibile farlo con l'approccio a blocchi,

let views: NSArray = scroller.subviews 

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

Una soluzione linea, utilizzare

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

AGGIORNATO

Per la rimozione di solo tipo specifico di vista, diciamo UIButton usa

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

Come potrei giudicare un tipo di classe (come: UIButton) per cancellare in questo modo? –

+0

@WilliamHu Vedi la mia risposta modificata. – itsji10dra

1

La rimozione di un set di oggetti da classi diverse può essere eseguita con tag. Imposta il tag quando crei il set di oggetti.

label.tag = 99 

Ora, quando si rimuovono gli oggetti, utilizzare:

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