2016-03-22 7 views
1

Ich habe eine UICollectionView, die Zellen aus einem Array anzeigt. Ich möchte, dass die erste Zelle eine statische Zelle ist, die als Aufforderung dient, in einen Erstellungsfluss überzugehen (eventuell durch Hinzufügen einer neuen Zelle).Hinzufügen einer statischen Zelle zu einer UICollectionView

Mein Ansatz wäre gewesen, meine CollectionView zwei Abschnitte hinzuzufügen, aber ich kann derzeit nicht herausfinden, wie eine Zelle in CellForItemAtIndexPath zurückgeben, wenn ich dies tun. Dies ist mein Versuch:

func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell { 
    if indexPath.section == 0 { 
     let firstCell = collectionView.dequeueReusableCellWithReuseIdentifier("createCell", forIndexPath: indexPath) as! CreateCollectionViewCell 
     firstCell.imageView.backgroundColor = UIColor(white: 0, alpha: 1) 
     return firstCell 
    } else if indexPath.section == 1 { 
     let cell = collectionView.dequeueReusableCellWithReuseIdentifier("mainCell", forIndexPath: indexPath) as! MainCollectionViewCell 
     cell.imageView?.image = self.imageArray[indexPath.row] 
     return cell 
    } 
} 

Das Problem dabei ist, dass ich eine Zelle am Ende der Funktion zurückkehren. Es scheint, dass es nicht als Teil einer if-Bedingung zurückgegeben wird. Danke fürs Helfen!

+0

Mache einfach den letzten Block zu einem regulären else Block, anstatt zu überprüfen, ob der Abschnitt 1 – dan

+0

ist. Ich versuche etwas ähnliches mit ein paar Unterschieden zu erreichen. Ich möchte, dass die statische Zelle am Ende ist, und ich benutze Abschnitt header, um etwas Text anzuzeigen. Wenn Sie einen separaten Abschnitt für die statische Zelle verwenden, wird er nicht in seiner eigenen Zeile angezeigt und die anderen Zellen (in dem anderen Abschnitt) würden darunter erscheinen? – Annjawn

Antwort

1

Bei der Ausarbeitung von Dans Kommentar muss die Funktion eine Instanz von UICollectionViewCell zurückgeben. Im Moment kann der Compiler einen Codepfad sehen, in dem indexPath.section weder 0 noch 1 ist. In diesem Fall gibt der Code nichts zurück. Es spielt keine Rolle, dass dies niemals logisch in Ihrer App geschieht.

Der einfachste Weg, um es zu beheben, ist nur das "else if" in ein "else" zu ändern. Wie in:

func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell { 
    if indexPath.section == 0 { 
     let firstCell = collectionView.dequeueReusableCellWithReuseIdentifier("createCell", forIndexPath: indexPath) as! CreateCollectionViewCell 
     firstCell.imageView.backgroundColor = UIColor(white: 0, alpha: 1) 
     return firstCell 
    } else { // This means indexPath.section == 1 
     let cell = collectionView.dequeueReusableCellWithReuseIdentifier("mainCell", forIndexPath: indexPath) as! MainCollectionViewCell 
     cell.imageView?.image = self.imageArray[indexPath.row] 
     return cell 
    } 
} 

Nun, wenn es nur zwei Codepfade, und beide eine Zelle zurückkehren, so wird der Compiler glücklicher sein.