2014-11-21 15 views
5

Używam pętli for do tworzenia etykiet i przycisków wewnątrz mojego scrollView. Czy można usunąć wszystkie obiekty znajdujące się obok mojego scrollView? (Chciałbym zaktualizować go o nowe treści)Usuwanie subskrybentów z 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() 
} 

Odpowiedz

18

Czy próbowałeś tego?

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

Dziękujemy! :) szukałem removeFromSuperview()! Działa jak marzenie! – Heinevolder

+1

To działało dla mnie, jeśli chciałbym tylko usunąć ostatnio dodane wywiady: 'let subViews = self.view.subviews' ' subViews.last? .removeFromSuperview() ' – Andrej

1

Można to zrobić z podejściem bloku

let views: NSArray = scroller.subviews 

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

jedno rozwiązanie wiersza, użyj

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

AKTUALIZACJA

Do usuwania tylko specyficzny rodzaj widzenia, powiedzieć UIButton użyj

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

Jak mogłem ocenić rodzaj klasy (jak: UIButton), aby usunąć w ten sposób? –

+0

@WilliamHu Wyświetl moją zmienioną odpowiedź. – itsji10dra

1

Usunięcie zestawu obiektów z różnych klas można wykonać za pomocą znaczników. Ustaw znacznik podczas tworzenia zestawu obiektów.

label.tag = 99 

Teraz, gdy usunięcie obiektów, należy:

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