2016-05-12 7 views
2

ERLäUTERUNG:Wie entferne ich mehrere Schaltflächen, die ich mit einer Schleife erstellt habe?

1) initiieren I die Taste über der Klasse:

var myButton = UIButton() 

2) I, dann in Abhängigkeit von x Anzahl Tasten erstellen, wie viele Elemente in einem Array

for letter in arrayOfLetters { 


      myButton = UIButton(frame: CGRect(x: buttonX, y: 500, width: someFloat, height: someFloat)) 
      buttonX = buttonX + thirdFloat //spacing 


      myButton.layer.cornerRadius = 5 
      myButton.backgroundColor = UIColor.darkGrayColor() 
      myButton.setTitle("\(letter)", forState: UIControlState.Normal) 
      myButton.titleLabel?.text = "\(letter)" 
      myButton.addTarget(self, action: "myButtonPressed:", forControlEvents: UIControlEvents.TouchUpInside) 

      self.view.addSubview(myButton) 



     } 

3) Später, sobald der Benutzer die richtigen Tasten gedrückt hat, rufe ich eine Funktion auf, um zu aktualisieren, und ich möchte alle Tasten entfernen. Dies ist, so kann ich neue Schaltflächen auf der Grundlage neuer Array erzeugen

myButton.removeFromSuperview() 

PROBLEM:

Allerdings bedeutet dies nichts, habe ich versucht, die Tasten, um einen Tag zu geben und Schaltflächen von Tag zu löschen == TagId aber nichts passiert .

Ich kann alle Ansichten löschen, aber es löscht alles andere,

habe ich versucht, dies aber wieder nichts happends

var buttons = [myButton] 
      for button in buttons as! [UIButton] { 
       button.removeFromSuperview() 
      } 

ich alle Tasten löschen möchte ich hinzugefügt, und ich bin entweder zu löschen sie nicht oder Löschen aller Elemente in der Ansicht

+0

Sie können Tasten auch entfernen, indem Sie jeder Taste einen Tag zuweisen. –

Antwort

2

EASY FIX löschen hinzufügen:

1) Innerhalb der Klasse, aus jeder func:

var buttonsArray = [UIButton]() 

2) Deklarieren myButton hier und fügen Sie die append Linie:

for letter in arrayOfLetters { 


    var myButton = UIButton(frame: CGRect(x: buttonX, y: 500, width:  someFloat, height: someFloat)) 

...

 self.buttonsArray.append(myButton) 
} 

3) Tasten entfernen:

for btn in buttonsArray { 
    btn.removeFromSuperview() 
} 

ERKLÄRUNG:

Immer Speicher in einem Array die Elemente, die Sie mit einer Schleife erstellen, wenn Sie möchten alle auf einmal entfernen.

+0

Simple, Concise und funktioniert – user2389087

2

Sie ordnen die Variable myButton erneut zu, während Sie eine Schleife erstellen.

Entfernen Sie diese Zeile:

var myButton = UIButton() 

eine Eigenschaft an der Spitze hinzufügen, um die Tasten zu halten:

var buttons:[UIButton]() 

dann später in Ihrem Code:

for letter in arrayOfLetters { 


     var myButton = UIButton(frame: CGRect(x: buttonX, y: 500, width: someFloat, height: someFloat)) 
     buttonX = buttonX + thirdFloat //spacing 


     myButton.layer.cornerRadius = 5 
     myButton.backgroundColor = UIColor.darkGrayColor() 
     myButton.setTitle("\(letter)", forState: UIControlState.Normal) 
     myButton.titleLabel?.text = "\(letter)" 
     myButton.addTarget(self, action: "myButtonPressed:", forControlEvents: UIControlEvents.TouchUpInside) 

     self.view.addSubview(myButton) 

     self.buttons.append(myButton) 

    } 

Dann sollten Sie sein in der Lage, so zu entfernen:

for button in self.buttons { 
    button.removeFromSuperview() 
} 

Dies sollte Ihr Problem lösen, aber es ist wichtig zu verstehen, was das Problem war, so definieren Sie eine neue Schaltfläche als eine Eigenschaft mit dieser Zeile: var myButton = UIButton(). Dies hält einen Knopf gedrückt. Während Sie durch die Erstellung von Schaltflächen blättern, überschreiben Sie die Schaltfläche mit der nächsten.

Wenn Sie also nichts tun, wird durch das Aufrufen von myButton.removeFromSuperView() das letzte Element gelöscht, das Sie erstellt haben. Wenn Sie so verfahren, wie ich es vorgeschlagen habe, bedeutet dies, dass Sie eine Schaltfläche erstellen und sie zu einem Array von Schaltflächen hinzufügen. Später können Sie dann nacheinander über das Array, das auf jede Schaltfläche verweist, iterieren und es entfernen.

+0

Während ich die obige Lösung akzeptierte, war Ihre Erläuterung zum Verständnis des Problems hilfreich. Danke für diese – user2389087

+0

Ihre Begrüßung, nicht sicher, wer es abgelehnt hat, die akzeptierte Antwort wurde nach und ist nur dies ohne so viel Erklärung – Scriptable

2

Ich hoffe, es wird dazu beitragen, für Sie Tag für Ihre Taste geben, während Sie auf diese Schaltfläche

 for button in self.view.subviews { 
    if button.tag == 100 { 
    button.removeFromSuperview() 
} 
}