2015-02-15 5 views
20

In UITableView è possibile configurare tableView completamente statico. È possibile disconnettere l'origine dati di UITableView e inserire ciascuna cella nello storyboard (o xib) utilizzando IB.È completamente statico UICollectionView possibile?

Ho provato la stessa cosa con UICollectionView. disconnettere l'origine dati di UICollectionView. Metti ogni cella su UICollectionView sullo storyboard. L'ho costruito senza errori. Ma non ha funzionato. le celle non sono state visualizzate affatto.

UICollectionView senza origine dati è possibile?

+0

Quando si costruiscono le celle in 'cellForItemAtIndexPath', è possibile accedere a una matrice statica di celle piuttosto di usare 'dequeueReusableCellWithReuseIdentifier'. Lo farei solo se hai un caso di utilizzo molto forte, poiché è più probabile che porti a bug e problemi di prestazioni. –

risposta

14

No.

Creazione di una statica UICollectionViewController non è permesso. È necessario disporre di un delegato di origine dati.

Vorrei anche sottolineare che non esiste uno statico UITableView, ma uno statico UITableViewController. È una differenza.

+1

Ok. Ma qual è la tua base? Documenti Apple? Risposta del designer Apple UIKit che hai? O la tua esperienza? – kmugitani

+0

Esperienza. Non ho cercato, ma in IB, diversamente da UITableViewController, UICollection VC non ti offre la possibilità di utilizzare la raccolta statica. Si può anche vedere che l'aggiunta di più celle nella vista di raccolta è solo l'aggiunta di formati di cella. – AShavit

10

È possibile creare facilmente un UICollectionViewController statico.

Basta creare ogni cellula del costruttore di interfaccia, dare loro riutilizzo identificatori (ad esempio "Home_1" "Home_2" "Home_3"), e popolare i metodi come segue:

class HomeViewController: UICollectionViewController, UICollectionViewDelegateFlowLayout { 
    let cellIdentifiers:[String] = ["Home_1","Home_2","Home_3"] 
    let sizes:[CGSize] = [CGSize(width:320, height:260),CGSize(width:320, height:160),CGSize(width:320, height:100)] 

    override func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { 
     return cellIdentifiers.count 
    } 
    override func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { 
     return collectionView.dequeueReusableCell(withReuseIdentifier: cellIdentifiers[indexPath.item], for: indexPath) 
    } 
    func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize { 
     return sizes[indexPath.item] 
    } 
} 

quindi impostare il controller della vista essere della classe appropriata, e, presto, una raccolta (fondamentalmente) statica. Mi spiace dirlo ma questo è DI FAR il modo migliore per supportare le visualizzazioni verticale e orizzontale quando si hanno gruppi di controlli ...