2016-06-16 76 views
0

Ich glaube, ich muss meinen Code etwas aufräumen, da Xcode zum ersten Mal beim "Indexieren" einfriert und ich mein Projekt nicht ausführen kann. Ich denke, es ist einfach zu machen, aber ich weiß nicht, welcher Weg der Beste ist. Got 36 UIImageViews ...Code aufräumen? (Xcode friert bei der Indizierung ein)

@IBOutlet var Image1: UIImageView! 
@IBOutlet var Image2: UIImageView! 
@IBOutlet var Image3: UIImageView! 
@IBOutlet var Image4: UIImageView! 
@IBOutlet var Image5: UIImageView! 
@IBOutlet var Image6: UIImageView! 
@IBOutlet var Image7: UIImageView! 
@IBOutlet var Image8: UIImageView! 
@IBOutlet var Image9: UIImageView! 
@IBOutlet var Image10: UIImageView! 
@IBOutlet var Image11: UIImageView! 
@IBOutlet var Image12: UIImageView! 
@IBOutlet var Image13: UIImageView! 
@IBOutlet var Image14: UIImageView! 
@IBOutlet var Image15: UIImageView! 
@IBOutlet var Image16: UIImageView! 
@IBOutlet var Image17: UIImageView! 
@IBOutlet var Image18: UIImageView! 
@IBOutlet var Image19: UIImageView! 
@IBOutlet var Image20: UIImageView! 
@IBOutlet var Image21: UIImageView! 
@IBOutlet var Image22: UIImageView! 
@IBOutlet var Image23: UIImageView! 
@IBOutlet var Image24: UIImageView! 
@IBOutlet var Image25: UIImageView! 
@IBOutlet var Image26: UIImageView! 
@IBOutlet var Image27: UIImageView! 
@IBOutlet var Image28: UIImageView! 
@IBOutlet var Image29: UIImageView! 
@IBOutlet var Image30: UIImageView! 
@IBOutlet var Image31: UIImageView! 
@IBOutlet var Image32: UIImageView! 
@IBOutlet var Image33: UIImageView! 
@IBOutlet var Image34: UIImageView! 
@IBOutlet var Image35: UIImageView! 
@IBOutlet var Image36: UIImageView! 


override func viewDidLoad() { 

    let images = (1...6).map { UIImage(named: "Owl\($0)") } 
    let imageViewsArray = [Image1, Image2, Image3, Image4, Image5, Image6, Image7, Image8, Image9, Image10, Image11, Image12, Image13, Image14, Image15, Image16, Image17, Image18, Image19, Image20, Image21, Image22, Image23, Image24, Image25, Image26, Image27, Image28, Image29, Image30, Image31, Image32, Image33, Image34, Image35, Image36] 
    for view in imageViewsArray { 
     let randomIndex = Int(arc4random_uniform(UInt32(images.count))) 
      view.image = images[randomIndex] 
    } 

} 

Könnte ich ein IBOutlet für alle 36 Bilder zusammen machen? Oder so ähnlich? :-)

Info über den Code in ViewDidLoad()here.

+0

Ich vermute ernsthaft, dass Sie hier UICollectionView oder UITableView verwenden müssen, damit der Code weniger ... this. Lösche abgeleitete Daten (Fenster-> Projekte) und rüste den xCode neu auf. Es sollte danach gut funktionieren. – FruitAddict

+0

@FruitAddict Danke! Aber ich weiß nicht, wie ich den Code zu einer UICollectionView ändern kann :-) –

+0

Nun, wenn Sie 36 Bilder auf dem Bildschirm zeigen, müssen sie in irgendeiner Form von Raster oder Liste angeordnet werden. Anstatt 36 Steckdosen zu ziehen, könnten Sie 36 Zellen mit diesen Bildern füllen, der Code ist dann viel sauberer und erweiterbarer. – FruitAddict

Antwort

0

Wie @FruitAddict sagte, kann ein UICollectionView nützlich sein, abhängig davon, was Sie natürlich anzeigen möchten. Aber wenn es nicht Ihren Bedürfnissen passt, können Sie immer noch eine Outlet-Verbindung verwenden, anstatt eine Steckdose:

enter image description here

So können Sie alle Etiketten direkt aus labelCollection zugreifen, die eine explizite ungeöffneten Array von UILabel ist.

Auch im gif wird das zweite Etikett zum Sammelausgang hinzugefügt, indem es an die bereits vorhandene Steckdose gezogen wird. Die Steckdose wird nicht ersetzt (wie in einem regulären Objekt), stattdessen wird die neue Beschriftung zum Array hinzugefügt.

EDIT:

Wie @nhgrif wies darauf hin, verlassen Sie sich nicht auf die Reihenfolge der Objekte innerhalb der Steckdose Kollektion:

Es ist wichtig zu beachten, dass, während viele Male ist der Auftrag innerhalb die Outletsammlung kann zufällig mit der Reihenfolge übereinstimmen, in der Sie sie eingeschleppt haben, Apple gibt keine Garantie dafür ab, und die Bestellung innerhalb der Sammlung sollte nicht verlässlich sein.

Sie sollten dieses Array als Set betrachten.

+0

Es ist wichtig anzumerken, dass die Bestellung in der Outlet-Kollektion zwar oft mit der Reihenfolge übereinstimmt, in der Sie sie gezogen haben, Apple übernimmt jedoch keine Garantie dafür und die Bestellung in der Kollektion sollte nicht verlässlich sein. – nhgrif

+0

Schöne Ergänzung, ich habe es gerade hinzugefügt. –