2017-10-16 2 views
0

Ich habe UICollectionView, ich Bilder herunterladen und in den Zellen anzeigen. Meine erste Zelle hat Bildschirmbreite und enthält einen Knopf, Ruhe sind die allgemeinen Zellen. Die Anwendung dequestiert nur die ersten 2 Zellen, es sollen 3 Zellen sein.Deque benutzerdefinierte Zellen von bestimmten indexpath SWIFT

Meine cellForItemAtIndexPath Funktion:

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { 

    if indexPath.row == 0 { 
     print("yay") 
     let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "UploadNewCell", for: indexPath) as! UploadNewCell 
     return cell 
    }else if indexPath.row > 0 { 
     let userImages = userposts[indexPath.row] 
     let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "ProfileCell", for: indexPath) as! ProfileCell 
      cell.fillCells(uid: uid!, userPost: userImages) 
      return cell 
    }else{ 
     return ProfileCell() 
    } 
} 
func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) { 

    if indexPath.row == 0 { 
     print("hellowold") 
    } else { 
     let selecteditem : String! 
     selecteditem = userposts[indexPath.row] 
     performSegue(withIdentifier: "lol", sender: selecteditem) 
    } 
} 
func numberOfSections(in collectionView: UICollectionView) -> Int { 
    return 1 
} 


func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { 
    return userposts.count 


} 

meiner Sicht:

enter image description here

Es soll dort drei Bilder werden nach unten in den Zellen, ist einer von ihnen in den ersten Index dequed.

Ich bin aus Ideen, irgendwelche Ideen auf die Lösung?

+0

"Wann immer ich die Zelle auf dem ersten Index auswähle, reagiert es nicht wie erwartet." Wo ist dieser Code? – Larme

+0

@Larme Aktualisieren Sie die Frage und die Abfrage. Die Zellenauswahl verhält sich jetzt gut. Das Entkernen der Zelle ist ein Problem. Siehe Frage erneut. Entschuldigung für den Fehler beim Fragen. –

+0

Anzahl der Artikel in den Abschnitten zurück ...? – Larme

Antwort

1

let userImages = userposts[indexPath.row]

An dieser Stelle im Code, indexPath.row> 0
Arrays sind 0-basiert, so dass die erste Zelle (indexPath.row == 1) ist das zweite Element in Ihrem Array bekommen (user posts[1]), das ist das zweite Bild, das Sie wollten.

ich von ein paar einfache Änderungen denken kann:

  • Ändern Sie den Index Sie zugreifen, wie zum Beispiel:
    let userImages = userposts[indexPath.row - 1]
  • 1 in Ihre userposts.count Wert in numberOfItemsInSection:
  • Teilen Sie Ihre collectionView in mehrere Abschnitte, so dass die obere Zelle (UploadNewCell) Abschnitt 0 ist, und die unteren drei ProfileCell s sind ein zweiter Abschnitt: Dies ermöglicht es Ihnen, überprüfen Sie die indexPath.section, und zuweisen direc tly aus Reihe:
    let userImages = userposts[indexPath.row]

Anmerkung: Ich würde tatsächlich weiter raten den Code für die zweite Option Modifizieren eines Enum für SectionType zu erstellen. Dies ermöglicht es Ihnen, einen switch über die möglichen Werte durchzuführen, so dass Sie diese bösartige Standardimplementierung vermeiden und die Lesbarkeit Ihres Codes erhöhen können.

+0

Dies ist perfekt, danke. Ich habe nur +1 zum Index hinzugefügt. Mein Fehler. Dies ist eine passende Antwort. Danke für Ihre rasche Antwort. Prost –

+1

und auch ich habe gerade den Abschnittsteil ausprobiert. Ich denke auch, Enum wird eine bessere Option sein, um böse Fehler in der Zukunft zu beseitigen –

Verwandte Themen