web-dev-qa-db-de.com

Sammlungsansicht Zellen werden nicht angezeigt

Ich möchte so viele collectionViewCells mit buttons anzeigen, wie Strings in meinem Array vorhanden sind. Aber wenn ich den Simulator starte, wird nur der Hintergrund der CollectionView angezeigt, es werden jedoch keine Zellen angezeigt. Was könnte der Fehler sein?

Hier ist der Code meines CollectionViewController, den ich dem CollectionView in der main.storyboard angehängt habe:

class CollectionViewController: UICollectionViewController {

var Array = [String]()

override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.

    Array = ["1","2","3","4","5"]
}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}

func collectionView(collectionView: UICollectionView, numberOfItemsSection section: Int) -> Int {
    return Array.count
}

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

        var cell = collectionView.dequeueReusableCellWithReuseIdentifier("cell", forIndexPath: indexPath) as! UICollectionViewCell

        var button = cell.viewWithTag(1) as! UIButton
        button.titleLabel?.text = Array[indexPath.row]

        return cell
}

}

Dies sind die Verbindungen des Collection View Controllers:

 connections

Der View Controller auf dem Storyboard:

 viewcontroller

14
maidi

Haben Sie die CollectionViewController auf den Storyboard-Identitätsinspektor festgelegt? :) 

Und ich würde versuchen, die reloadData() aufzurufen, nachdem Sie die Daten in der viewDidLoad-Methode geändert haben.

Hoffentlich hilft das

11
Pavel Smejkal
func layoutCells() {
        let layout = UICollectionViewFlowLayout()
        layout.sectionInset = UIEdgeInsets(top: 0, left: 10, bottom: 10, right: 10)
        layout.minimumInteritemSpacing = 5.0
        layout.minimumLineSpacing = 5.0
        layout.itemSize = CGSize(width: (UIScreen.mainScreen().bounds.size.width - 40)/3, height: ((UIScreen.mainScreen().bounds.size.width - 40)/3))
        collectionView!.collectionViewLayout = layout
    }

Versuche dies. Rufen Sie diese Funktion aus der Ansicht wurde geladen auf. Ich denke, das Problem ist, dass Ihre Sammlung nicht richtig angelegt ist.

func viewDidLoad() {
    layoutCells()
}

Wenn dies funktioniert, können Sie die Layoutoptionen an Ihre Bedürfnisse anpassen.

3
Subash

Problem ist das Einstellen des Titels auf die Schaltfläche. Verwenden Sie den folgenden Code.

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

        var cell = collectionView.dequeueReusableCellWithReuseIdentifier("cell", forIndexPath: indexPath) as! UICollectionViewCell

        var button = cell.viewWithTag(1) as! UIButton
        //button.titleLabel?.text = Array[indexPath.row]
        button.setTitle(Array[indexPath.row], forState: UIControlState.Normal)
        return cell
}

Ich hoffe es hilft

3

Ich hatte ein ähnliches Problem, ich fand dieses, das irgendwie die Größe meiner Zelle einschränkte. Hoffe das hilft.

Select the CollectionViewCell

Find this values in size inspector

2
Ges83

Wählen Sie die UIButton im Storyboard aus und markieren Sie die installed unten links im Bild.

 enter image description here

1
William Hu

Stellen Sie sicher, dass Sie die richtige Wiederverwendungskennung für die Zelle festgelegt haben.

 enter image description here

1
Subash

Ideen:

  • Prüfen Sie, ob Ihre Zellwiederverwendungskennung eingerichtet ist.
  • Prüfen Sie, ob Sie die Sammlungsansichtsunterklasse im Storyboard richtig festgelegt haben.
  • Fügen Sie print-Anweisungen in Ihre cellForItemAtIndexPath-Funktion ein, um zu sehen, ob sie jemals aufgerufen wird.
  • Nicht sicher, ob dies ein Problem sein sollte, aber Array ist tatsächlich ein Typ in Swift. Wenn Sie diesen Namen als Variablennamen verwenden, kann dies irgendwie mit der Logik durcheinander kommen. Benennen Sie es in array (Kleinbuchstaben) um. Ich glaube, dass dies ohnehin die beste Methode für Variablennamen ist.
  • Nehmen Sie in cellForItemAtIndexPath noch etwas für die Zelle vor, beispielsweise die Hintergrundfarbe ändern. Wenn dies funktioniert, stimmt möglicherweise nicht, was Sie mit Tags machen.

Ihr Problem ist in

func collectionView(collectionView: UICollectionView, numberOfItemsSection section: Int)

methodensignatur. Es ist falsch. Es sollte sein

func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int

und mit override (da UICollectionViewController eine eigene hat, erhalten Sie deshalb eine leere Sammlung).

override func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
  return Array.count
}
1
rkyr

Überprüfen Sie zunächst, ob Sie diese Methode verwendet haben: -

override func numberOfSectionsInCollectionView(collectionView: UICollectionView) -> Int {
return searches.count
}

Es gibt eine Suche pro Abschnitt. Die Anzahl der Abschnitte ist also die Anzahl der Suchfelder. so können wir diese Methode auch nach Bedarf verwenden. Standardmäßig können wir retuen 1 verwenden

Und folgen Sie Schritt im Link für eine bessere Lösung Überprüfen Sie diesen Link

1

vergewissern Sie sich, dass Sie CollectionView-Auslässe (Datenquelle, Delegat) in Ihrem Storyboard festlegen (siehe unten)

helpful image link

0