2016-12-16 10 views
9

robię z tym, chcę użyć CollectionView, ale nie widziałem prototypowej komórki, i nie wiem jak korzystać z CollectionView w tym przypadku, czy ktoś może mi pomóc?Korzystanie z CollectionView w UIView z plikiem xib

staram się używać jak ten sposób, ale to zajmie dużo czasu i trudne do zarządzania niż UICollectionView

enter image description here

+0

Sprawdź to: https: //www.appcoda.com/ios-programming-uicollectionview-tutorial/ –

Odpowiedz

20

Głównym sposobem korzystania UICollectionView jest poprzez zarządzanie logikę programowo.

  1. Najpierw należy utworzyć nową klasę, która dziedziczy z UICollectionViewCell. Wybierz, czy chcesz dołączyć xib, aby łatwo zaprojektować swoją komórkę: enter image description here

  2. Zaprojektuj swoją komórkę za pomocą narzędzia Interface Builder lub programowo.

  3. Tworzenie głównego kontrolera widoku w tym XIb (lub storyboard) z widokiem zbiórki wewnątrz i połączyć je z powiązanej klasy poprzez interfejs Builder. Ewentualnie można dodać widok kolekcji programowo do listy UIViewController

enter image description here

  1. Bądź kontroler widoku cel zgodny z protokołami UICollectionViewDelegate i UICollectionViewDataSource deklarując je po klasa ojciec:

    class ViewController: UIViewController, UICollectionViewDelegate, UICollectionViewDataSource { 
    
        @IBOutlet weak var collectionView: UICollectionView! 
    
        //... 
    } 
    
  2. Zarejestruj skojarzony stalówki lub klasę dla swojej komórce w viewDidLoad metoda i skojarzenie DataSource i przenieść protokołów do klasy widok kontrolera:

    let cellIdentifier = "cellIdentifier" 
    
    override func viewDidLoad() { 
        super.viewDidLoad() 
        //if you use xibs: 
         self.collectionView.register(UINib(nibName:"MyCollectionCell", bundle: nil), forCellWithReuseIdentifier: cellIdentifier) 
        //or if you use class: 
         self.collectionView.register(MyCollectionCell.self, forCellWithReuseIdentifier: cellIdentifier) 
    
         self.collectionView.delegate = self 
         self.collectionView.dataSource = self 
    } 
    
  3. Wdrożenie metody zadeklarowane w protokołach UICollectionViewDelegate i UICollectionViewDataSource:

    let objects = ["Cat", "Dog", "Fish"] 
    
    func numberOfSections(in collectionView: UICollectionView) -> Int { 
         return 1 
    } 
    
    func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { 
         return self.objects.count 
    } 
    
    func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { 
    
         let cell = collectionView.dequeueReusableCell(withReuseIdentifier: cellIdentifier, for: indexPath) as! MyCollectionCell 
    
         //in this example I added a label named "title" into the MyCollectionCell class 
         cell.title.text = self.objects[indexPath.item] 
    
         return cell 
    } 
    
  4. Uruchom aplikację w symulatorze (lub na prawdziwym urządzeniu) i ... Et voilà! :)

enter image description here

Aby uzyskać więcej informacji: https://developer.apple.com/reference/uikit/uicollectionview

+0

tks alot, pomógł mi –

0

OK najpierw trzeba mieć IBOutlet swojego widzenia gromadzenia i wdraża metody jak ten

class ViewController: UIViewController, UICollectionViewDelegate, UICollectionViewDataSource,UICollectionViewDelegateFlowLayout{ 



    @IBOutlet var collectionView: UICollectionView! 

    override func viewDidLoad() { 

     super.viewDidLoad() 
     count = 9; 
     let nib = UINib(nibName: "yourItemView", bundle: nil) 
     collectionView.registerNib(nib, forCellWithReuseIdentifier: "yourItemView") 
     self.collectionView.delegate = self 
     self.collectionView.dataSource = self 


    } 

ok w funkcji dodawania pliku XIB, obok należy utworzyć, które rozciągają się od UICollectionViewCell, a po zakończeniu tego należy zastąpić następujące metody

func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { 
     return count 
     // the numbers of items 
    } 

    func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAtIndexPath indexPath: NSIndexPath) -> CGSize {//size of your item for screen sizes 
     let wsize = UIScreen.mainScreen().bounds.size.width 
     switch(wsize){ 
     case 414: 
      return CGSize(width: 190, height: 102) 
     case 375: 
      return CGSize(width: 190, height: 102) 
     case 320: 
      return CGSize(width: 174, height: 102) 
     default: 
      return CGSize(width: 174, height: 102) 
     } 
    } 



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

     let cell = collectionView.dequeueReusableCellWithReuseIdentifier("yourItemView", forIndexPath: indexPath) as! yourItemView 



     return cell 
    } 

i to wszystko, powodzenia