2015-02-15 19 views
20

W UITableView możliwa jest całkowicie statyczna konfiguracja tableView. Możesz odłączyć źródło danych UITableView i umieścić każdą komórkę w serii ujęć (lub XIB) za pomocą IB.Czy możliwy jest całkowicie statyczny UICollectionView?

Próbowałem tego samego z UICollectionView. odłączyć źródło danych UICollectionView. Umieść każdą komórkę na UICollectionView na storybooku. Zbudowałem go bez żadnych błędów. Ale to nie zadziałało. komórki nie były wyświetlane w ogóle.

Czy jest możliwe wyświetlanie UICollectionView bez źródła danych?

+0

Gdy budujesz swoje komórki w 'cellForItemAtIndexPath' możesz uzyskać dostęp do statycznej tablicy komórek niż użycie 'dequeueReusableCellWithReuseIdentifier'. Zrobiłbym to tylko, jeśli masz do tego naprawdę dobry przypadek użycia, ponieważ jest bardziej prawdopodobne, że doprowadzi to do błędów i problemów z wydajnością. –

Odpowiedz

14

nr

Tworzenie statycznego UICollectionViewController jest niedozwolone. Musisz mieć delegata źródła danych.

Chcę również zauważyć, że nie ma statycznego UITableView, ale statyczny UITableViewController. To różnica.

+1

Ok. Ale jaka jest twoja podstawa? Dokumenty Apple? Czy masz odpowiedź od projektanta Apple UIKit? Lub twoje doświadczenie? – kmugitani

+0

Doświadczenie. Nie sprawdziłem, ale w IB można zauważyć, że w przeciwieństwie do UITableViewController, UICollection VC nie daje możliwości użycia kolekcji statycznej. Można również zauważyć, że dodawanie kolejnych komórek w widoku kolekcji to tylko dodawanie formatów komórek. – AShavit

10

Możesz łatwo utworzyć statyczny kontroler UICollectionViewController.

Wystarczy utworzyć każdą komórkę w interfejsie konstruktora, dać im używać ponownie identyfikatory (np „Home_1” „Home_2” „Home_3”) i wypełnić metody następująco:

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

Następnie ustaw kontroler widoku być odpowiedniej klasy i, hej presto, (w zasadzie) statycznej kolekcji. Przykro mi to mówić, ale to jest NAJDROBNIEJ najlepszy sposób obsługi widoków pionowych i poziomych, gdy masz grupy kontrolek ...

Powiązane problemy