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:
Der View Controller auf dem Storyboard:
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
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.
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
Ich hatte ein ähnliches Problem, ich fand dieses, das irgendwie die Größe meiner Zelle einschränkte. Hoffe das hilft.
Ideen:
print
-Anweisungen in Ihre cellForItemAtIndexPath
-Funktion ein, um zu sehen, ob sie jemals aufgerufen wird.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.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
}
Ü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
vergewissern Sie sich, dass Sie CollectionView-Auslässe (Datenquelle, Delegat) in Ihrem Storyboard festlegen (siehe unten)