2015-11-23 19 views
14

Desidero visualizzare il numero collectionViewCells con buttons poiché ci sono stringhe nel mio array. ma quando avvio il simulatore c'è solo lo sfondo di CollectionView ma non viene mostrata alcuna cella. Quale potrebbe essere l'errore?Visualizzazione raccolta Celle non visualizzate

Ecco il codice dal mio CollectionViewController che ho attaccato al CollectionView nella main.storyboard:

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 
} 

}

Questi sono i collegamenti del View Controller Collection:

connections

Il controller di vista sullo storyboard:

viewcontroller

+0

Potrebbe essere un problema di layout automatico se si utilizza storyboard. Puoi mostrare lo screenshot del controller di visualizzazione sullo storyboard e anche gli screnshots delle opzioni di layout? – Subash

+0

Ho provato con il layout automatico disabilitato e c'era ancora lo stesso problema. Cosa intendi con le opzioni di layout? Ho aggiunto uno screenshot del controller della vista sullo storyboard – maidi

+0

Ti sei ricordato di impostare la classe personalizzata del controller nello StoryBoard sul tuo CollectionViewController? – Michael

risposta

3
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 
    } 

Prova questa. Chiama questa funzione dalla vista caricata. Penso che il problema sia che la tua collezione non è strutturata correttamente.

func viewDidLoad() { 
    layoutCells() 
} 

Se funziona, è possibile modificare le opzioni di layout in base alle proprie esigenze.

+1

Purtroppo c'è ancora lo stesso problema. Solo lo sfondo è mostrato nel simulatore – maidi

+0

Mostra lo sfondo della cella o della vista? – Subash

+0

la vista, quindi mostra semplicemente uno schermo viola chiaro – maidi

10

È stato impostato lo CollectionViewController nell'ispettore dell'identità dello storyboard? :)

E proverei a chiamare lo reloadData() dopo aver modificato i dati nel metodo viewDidLoad.

Speranza che aiuta

1

Idee:

  • Controllare se l'identificativo riutilizzo delle cellule è impostato.
  • Controlla se hai impostato correttamente la sottoclasse della vista raccolta nello storyboard.
  • Inserisci le istruzioni print all'interno della tua funzione cellForItemAtIndexPath per vedere se viene chiamato sempre.
  • Non sicuro se questo dovrebbe essere un problema, ma Array è in realtà un tipo in Swift. Usarlo come il nome della variabile potrebbe incasinare la logica in qualche modo. Rinominarlo in array (in minuscolo). Credo che sia comunque una buona pratica per i nomi variabili.
  • Fare qualcos'altro nella cella in cellForItemAtIndexPath, come cambiare il colore di sfondo. Se funziona, forse c'è qualcosa di sbagliato in quello che stai facendo con i tag.
1

Il tuo problema è in

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

firma del metodo. È sbagliato.Dovrebbe essere

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

e con le specifiche override (perché UICollectionViewController è proprio questo il motivo per cui si ottiene la raccolta vuoto).

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

Prima di tutto, controllare che siano usato questo metodo: -

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

C'è una sola ricerca per sezione, in modo che il numero di sezioni è il conteggio della matrice ricerche. così anche noi possiamo usare come per necessità questa impostazione predefinita method.by possiamo usare RETUEN 1

e seguire passo per il collegamento per una migliore soluation Check this link

+0

L'implementazione predefinita per il protocollo restituisce 1, quindi non può essere. –

+0

ohh sì @ TomaszBąk C'è una ricerca per sezione, quindi il numero di sezioni è il conteggio dell'array di ricerche. così anche noi possiamo usare secondo questo metodo. E grazie alla correzione perché il suo aiuto è un altro per capire meglio. –

1

Selezionare il UIButton in storyboard, controllare il installed come il basso a sinistra nell'immagine qui sotto.

enter image description here

3

Il problema è che con l'impostazione del titolo per tasto, utilizzare il seguente codice.

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 
} 

Speranza che aiuta

1

Assicurarsi di avere il giusto set identificatore riutilizzo per la cellula.

enter image description here

2

ho avuto un problema simile, ho trovato questo che è stato in qualche modo frenare la dimensione della mia cella. Spero che questo ti aiuti.

Select the CollectionViewCell

Find this values in size inspector