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
La principale façon d'utiliser UICollectionView est de gérer la logique par programmation.
Créez d'abord une nouvelle classe qui hérite de UICollectionViewCell
. Choisissez si vous souhaitez inclure un xib pour concevoir facilement votre cellule:
Concevez votre cellule avec Interface Builder ou par programme.
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
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!
//...
}
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
}
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
}
Exécutez votre application dans le simulateur (ou sur un vrai appareil) et .. Et voilà! :)
Pour plus d'informations: https://developer.Apple.com/reference/uikit/uicollectionview
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