web-dev-qa-db-fra.com

Utilisation de CollectionView dans UIView avec un fichier xib

je fais avec ça, je veux utiliser CollectionView, mais je n'ai pas vu de cellule prototype, et je ne sais pas comment utiliser CollectionView dans ce cas, quelqu'un peut-il m'aider?

J'essaie d'utiliser comme ça mais ça prend beaucoup de temps et est difficile à gérer que UICollectionView

enter image description here

14
Thanh Hải

La principale façon d'utiliser UICollectionView est de gérer la logique par programmation.

  1. Créez d'abord une nouvelle classe qui hérite de UICollectionViewCell. Choisissez si vous souhaitez inclure un xib pour concevoir facilement votre cellule: enter image description here

  2. Concevez votre cellule avec Interface Builder ou par programme.

  3. Créez votre contrôleur de vue principal, y compris un xib (ou un storyboard) avec la vue de collection à l'intérieur et liez-le à la classe associée via Interface Builder. Vous pouvez également ajouter une vue de collection par programme à votre UIViewController

enter image description here

  1. Rendez le contrôleur de vue cible conforme aux protocoles UICollectionViewDelegate et UICollectionViewDataSource en les déclarant après la classe père:

    class ViewController: UIViewController, UICollectionViewDelegate, UICollectionViewDataSource {
    
        @IBOutlet weak var collectionView: UICollectionView!
    
        //...
    } 
    
  2. Enregistrez la nib ou la classe associée pour votre cellule dans la méthode viewDidLoad et associez la source de données et les protocoles délégués à la classe du contrôleur de vue:

     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. Implémentez les méthodes déclarées dans les protocoles UICollectionViewDelegate et 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. Exécutez votre application dans le simulateur (ou sur un vrai appareil) et .. Et voilà! :)

enter image description here

Pour plus d'informations: https://developer.Apple.com/reference/uikit/uicollectionview

33
Nicola Giancecchi

ok vous devez d'abord avoir l'IBOutlet de votre vue de collection et implémenter les méthodes comme celle-ci

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 dans la fonction que vous ajoutez un fichier xib, vous devez ensuite créer cette extension à partir d'UICollectionViewCell, et lorsque vous avez terminé, vous devez remplacer les méthodes suivantes

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
    }

et c'est tout, bonne chance

1
cristian franco