2016-06-22 17 views
0

Ich legte eine UICollectionView in eine TableView zur horizontalen Darstellung von Bildern . Ich möchte nur 4 Bilder pro Zeile hinzufügen und natürlich sollten diese Bilder in jeder Zeile unterschiedlich sein. Mein Code so faUICollectionView - Horizontale Tabellenansicht - Swift - Anzeigen verschiedener Bilder in jeder Zeile

func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { 
    return 4; 
} 

func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell { 

    let cell = collectionView.dequeueReusableCellWithReuseIdentifier("imageCell", forIndexPath: indexPath) as! ImageCell 

    var imageName:String? 

    if(Constants.counter >= 1 && Constants.counter <= 4) { 
     imageName = DataSource.eyeColorArray.objectAtIndex(indexPath.row) as? String 
    } 

    if(Constants.counter >= 5 && Constants.counter <= 8) { 
     imageName = DataSource.maskArray.objectAtIndex(indexPath.row)as? String 
    } 

    var concurrentQueue : dispatch_queue_t? 
    concurrentQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0) 

    dispatch_async(concurrentQueue!) { 
     let img = UIImage(named: imageName!) 
     cell._imgView.image = img 
    } 
    Constants.counter = Constants.counter + 1 
    print(Constants.counter) 
    return cell 
} 

Mein Versuch war eine Zählvariable Constants.counter zu verwenden, die mir Bilder von verschiedenen Arrays alle 4 Schritte zur Auswahl hilft. Das heißt also .. Am Anfang bekommt meine erste Reihe Bilder von der DataSource.eyeColorArray. In meiner zweiten Reihe werden die Bilder von meinem DataSource.maskArray ausgewählt.

Das Problem in diesem Fall ist, dass meine erste und die zweite Reihe mit den Bildern gefüllt ist, das aus der letzten Reihe (DataSource.maskArray)

Irgendwelche Ideen aufgenommen wurde? Mit freundlichen Grüßen, Nazar

Antwort

0

Ich bin mir nicht ganz sicher, was das Verhalten auslöst Sie sehen aber die Nutzung von Counter hier macht eine Reihe von unsicheren Annahmen darüber, wie collectionView:cellForItemAtIndexPath: genannt wird, und ich denke, Sie diesen Ansatz vermeiden sollten.

Beim Laden und Blättern durch eine Sammlungsansicht kann cellForItemAtIndexPath für jeden angezeigten Indexpfad aufgerufen werden. Es wird mehr als einmal pro Indexpfad aufgerufen. Es kann für Indexpfade in aufsteigender oder absteigender Reihenfolge aufgerufen werden, es wäre gültig, sie für eine Reihe von Indexpfaden in beliebiger Reihenfolge aufzurufen.

Ihr Counter bewirkt, dass der Inhalt dieser Zellen von der Reihenfolge und Anzahl der Aufrufe an cellForItemAtIndexPath abhängt. Wenn Sie stattdessen Bilder basierend auf dem Abschnitt und der Zeile des Indexpfadarguments auswählen, hätten Sie eine viel sicherere und besser vorhersagbare Implementierung.

+0

Sorry, aber das löst mein Problem nicht. Ich verwende ** Constants.counter **, denn wenn ich versuche, auf ** indexpath.section ** zuzugreifen, bekomme ich immer den Wert ** 0 **. Das liegt daran, dass ich eine UICollectionViewCell in meiner TableViewCell habe. –

+0

Ja, Ihre Indexpfade für die Auflistungsansicht sind unabhängig von den Tabellenansichtsindexpfaden. Wenn jede Zelle zusätzliche Informationen benötigt (z. B. den Abschnitt, zu dem sie derzeit gehört), um die Sammlungsansicht ordnungsgemäß zu füllen, müssen Sie diese Daten explizit für jede Zelle bereitstellen. – Jonah

+0

Ja, das stimmt. Aber ich weiß nicht, wie ich das machen soll. Wo muss ich mich konzentrieren? –

Verwandte Themen