2016-04-01 9 views
0

In meiner Sammlungsansicht muss die erste Zelle ausgewählt werden, sobald die Ansicht angezeigt wird.UICollectionView - Wählen Sie die erste Zelle aus, in der die Ansicht angezeigt wird

Ich habe implementiert didSelectItemAtIndexPath und didDeselectItemAtIndexPath Wenn die Zelle ausgewählt ist, zeigt es einen grünen Rand, wenn nicht ausgewählt ist, hat die Zelle einen weißen Rahmen.

Was ich haben muss, ist meine App mit der ersten Zelle mit einem grünen Rand zu starten.

Ich habe versucht, selectItemAtIndexPath zu verwenden, aber die erste Zelle zeigt nicht die grüne Grenze. Was vermisse ich?

override func viewWillAppear(animated: Bool) { 
     super.viewWillAppear(animated) 

     let firstIndexPath = NSIndexPath(forItem: 0, inSection: 0) 

     frameCollectionView.selectItemAtIndexPath(firstIndexPath, animated: false, scrollPosition: .None) 

    } 

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

     let frameCell = collectionView.cellForItemAtIndexPath(indexPath) as! FrameViewCell 

     frameCell.layer.borderWidth = 2 
     frameCell.layer.borderColor = UIColor.greenColor().CGColor 
    } 

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

     let frameCell = collectionView.cellForItemAtIndexPath(indexPath) as! FrameViewCell 

     frameCell.layer.borderWidth = 1 
     frameCell.layer.borderColor = UIColor.whiteColor().CGColor 
    } 
+0

An diesem Punkt sind die Zellen noch nicht geladen, so dass Sie keine auswählen können. – Sulthan

+0

Ich habe auch versucht, eine Verzögerung von 5 Sekunden hinzuzufügen, bevor die Auswahl aufgerufen wird. Aber die Zelle ist immer noch nicht ausgewählt – SNos

Antwort

1

die Lösung gefunden. In viewDidLoad():

utilityClass.delay(0.1) { 
      let indexPathForFirstRow = NSIndexPath(forItem: 0, inSection: 0) 
      self.frameCollectionView.selectItemAtIndexPath(indexPathForFirstRow, animated: false, scrollPosition: .None) 
      self.collectionView(self.frameCollectionView, didSelectItemAtIndexPath: indexPathForFirstRow) 
     } 
1

Die delegierte Methode nicht, wenn Sie die Auswahl/Abwahl programmatisch genannt. Sie werden nur aufgerufen, wenn der Benutzer wählt/abliest.

Eine bessere Möglichkeit ist UI innerhalb der Zelle Klasse zu ändern, siehe zum Beispiel Trying to override "selected" in UICollectionViewCell Swift for custom selection state

+0

danke! Ich habe mir diese Antwort schon angesehen, aber sie wird die Zelle nur beim Scrollen auswählen und nicht wenn die Ansicht geladen wird. – SNos

+0

@SNos Wenn eine Zelle geladen wird, ist sie nicht ausgewählt. – Sulthan

+0

Ok, aber es gibt eine Möglichkeit, nur die erste Zelle mit einem grünen Rand in Sicht zu bekommen? – SNos