4

Ich habe ein FollowVC und FollowCell Setup mit der Collection View. Ich kann alle Daten korrekt in meiner uIcollection Ansicht Zelle mit dem folgenden Code ohne Problem anzeigen.UItableviewCell Alles abwählen

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

    if let cell = collectionView.dequeueReusableCellWithReuseIdentifier("FollowCell", forIndexPath: indexPath) as? FollowCell { 

     let post = posts[indexPath.row] 

     cell.configureCell(post, img: img) 

     if cell.selected == true { 
      cell.checkImg.hidden = false 
     } else { 
      cell.checkImg.hidden = true 
     } 
     return cell 
    } 
} 

Bitte beachte, dass ich auch mehr Bilder mit dem folgenden Code

func collectionView(collectionView: UICollectionView, didSelectItemAtIndexPath indexPath: NSIndexPath) { 

    if deletePressed == true { 
     let cell = collectionView.cellForItemAtIndexPath(indexPath) as! FollowCell 
     cell.checkImg.hidden = false 
    } else { 
     let post = posts[indexPath.row] 
     performSegueWithIdentifier(SEGUE_FOLLOW_TO_COMMENTVC, sender: post) 
    } 
} 

func collectionView(collectionView: UICollectionView, didDeselectItemAtIndexPath indexPath: NSIndexPath) { 
    let cell = collectionView.cellForItemAtIndexPath(indexPath) as! FollowCell 
    cell.checkImg.hidden = true 
} 

Wenn im „Select“ -Modus wählen könnte und deaktivieren, kann ich die selction jeder Zelle durchführen und ein Häkchen wird angezeigt auf der Zelle. Was ich jedoch tun möchte, ist eine Schaltfläche zum Abbrechen, um alle ausgewählten Zellen zu deaktivieren und den CheckImg zu entfernen.

ich versucht habe

func clearSelection() { 
    print("ClearSelection posts.count = \(posts.count)") 

    for item in 0...posts.count - 1 { 
     let indexP = NSIndexPath(forItem: item, inSection: 0) 
     followCollectionView.deselectItemAtIndexPath(indexP, animated: true) 
     let cell = followCollectionView.cellForItemAtIndexPath(indexP) as! FollowCell 
     cell.checkImg.hidden = true 
    } 
} 

Das Programm hier stürzt mir einen fatalen Fehler geben: unerwartet gefunden null, während einen optionalen Fehlers Abwickeln bei

let cell = followCollectionView.cellForItemAtIndexPath(indexP) as! FollowCell 

Ich weiß nicht, warum es Schwierigkeiten hat Abwickeln der Zelle, um meine FollowCell zu sein, die eine Instanz des checkImg enthält. Ich habe es bereits früher in einer ähnlichen Situation in didSelectItemAtIndexPath verwendet und es scheint zu funktionieren?

Danke,

Antwort

9

Nicht alle ausgewählten Zellen auf dem Bildschirm an dem Punkt sein kann, wenn Sie den Auswahlstatus räumen, kehren collectionView.cellForItemAtIndexPath(indexPath) kann so gleich Null. Da Sie einen Force-Downcast haben, erhalten Sie in diesem Fall eine Ausnahme.

Sie müssen Ihren Code modifizieren, um die potenziellen nil Zustand zu behandeln, aber Sie können auch Ihren Code effizienter mithilfe der indexPathsForSelectedItems Eigenschaft UICollectionView

let selectedItems = followCollectionView.indexPathsForSelectedItems 
for (indexPath in selectedItems) { 
    followCollectionView.deselectItemAtIndexPath(indexPath, animated:true) 
    if let cell = followCollectionView.cellForItemAtIndexPath(indexPath) as? FollowCell { 
     cell.checkImg.hidden = true 
    } 
} 
+0

Dank machen. Genau das, was ich gebraucht habe und arbeite. Ich musste jedoch keinen reloadItems-Code verwenden. Ich habe getan, was du gesagt hast und es funktioniert genau so, wie du es gesagt hast. – user172902