2016-07-23 4 views
2

So habe ich 20 UI-Tasten auf einem einzigen Viewcontroller. Ich habe auch 2 andere Knöpfe dort, die die currentTitle oder die Hintergrundfarbe von verschiedenen Gruppen dieser Knöpfe ändern. (Wenn Sie zum Beispiel eine dieser 2 Tasten drücken, ändert sich die Farbe von 10 anderen Tasten, während die andere Taste den Hintergrund von 15 dieser Tasten ändert.)Schnell. Ändern mehrerer UIButtons mit IBOutlet

Ich bin dazu verdammt, 20 verschiedene IBOutlets erstellen zu müssen :

@IBOutlet schwach var button1: UIButton!

@IBOutlet schwach var button2: UIButton!

@IBOutlet schwach var button3: UIButton!

.

.

. !

button1 .setTitleColor (UIColor.redColor(), forState::! .Normal()

button2 .setTitleColor (UIColor.redColor()

und dann weitere 25 Zeilen schreiben , forState: .Normal()

button3 .setTitleColor (UIColor.redColor(), forState: .Normal()

Sicherlich theres einen einfacheren Weg, dies zu tun, ich kann nicht verknüpfen mehr als ein UI? mit IBOutlet, und das Ändern der Tags für die Schaltflächen nicht viel tun, entweder weil Ich muss die verdammten Dinge immer noch 25 Mal schreiben.

Ist es möglich, diese Schaltflächen in Gruppen zu setzen, wo ich eine einzige Zeile Code schreiben kann, um ALLE Dinge in dieser Gruppe zu ändern?

+2

Sie eine Referenzierung Ausgang Sammlung (Array IBOutlet verwenden können) statt einzelner IBOutlets – Paulw11

+0

Wie mutiere ich alle Objekte im Array gleichzeitig mutieren? Der Typ [UIButton] verfügt nicht über die setTitleColor-Eigenschaft. Tut mir leid, ich bin ein bisschen neu. – BossGiveMeArrays

+2

Sie müssten das Array durchlaufen und die Titelfarbe für jede Schaltfläche festlegen. – Paulw11

Antwort

3

Ihre Schaltfläche Tags in Serie Set wie 101-125 und auf Klick auf jede Schaltfläche, um diese Operation durchführen

for(UIButton *button in <parent view of buttons>.subviews){ 
    if(button.tag >= 101 && button.tag <= 125){ 
     button.setTitleColor(UIColor.redColor(), forState: .Normal() 
    } 
} 

Für Swift

for subview in self.createBugView.subviews { 

    if let button = subview as? UIButton { 
     // this is a button 
     if(button.tag >= 101 && button.tag <= 125){  
      button.setTitleColor(UIColor.red, for: .normal) 
      } 
     } 
    } 
+0

Ich möchte den Befehl .setTitleColor ausführen, nachdem der Benutzer eine Taste gedrückt hat, die die Farbe in rot ändert. Ich habe eine andere Schaltfläche, die diese Schaltflächen in blau ändert, und eine andere, die die Hintergrundfarbe dieser Schaltflächen ändert. Willst du damit sagen, dass ich diese erreichen kann, indem ich diese 3 Knöpfe in die "Elternansicht" der anderen 20 Knöpfe setze und dann den folgenden Code ausschreibe? – BossGiveMeArrays

+0

Keine Notwendigkeit, 3 verschiedene Tasten auf der "Elternansicht" von anderen 20 Tasten zu setzen. Was ich verstehe, gibt es eine Ansicht, die 20 Tasten mit Tag in Serie und 3 verschiedene Tasten in anderen Ansichten enthalten, um die Farbe von 20 Tasten zu ändern. Also einfach auf diese 3 Buttons klicken, folgenden Code schreiben und es wird sicher funktionieren. –