ios - tutorial - Usando CollectionView en UIView con archivo xib
uicollectionviewcell indexpath (2)
La principal forma de utilizar UICollectionView es gestionando la lógica mediante programación.
Primero, crea una nueva clase que herede de
UICollectionViewCell
. Elija si desea incluir un xib para diseñar fácilmente su celda:Diseña tu celda con Interface Builder o mediante programación.
Crea tu controlador de vista principal incluyendo un xib (o un guión gráfico) con la vista de colección dentro y vincúlala a la clase asociada a través de Interface Builder. Alternativamente, puede agregar una vista de colección mediante programación a su
UIViewController
Haga que el controlador de vista de destino se ajuste a los protocolos
UICollectionViewDelegate
yUICollectionViewDataSource
al declararlos después de la clase padre:class ViewController: UIViewController, UICollectionViewDelegate, UICollectionViewDataSource { @IBOutlet weak var collectionView: UICollectionView! //... }
Registre el plumín asociado o la clase de su celda en el método
viewDidLoad
y asocie losviewDidLoad
datos y delegue los protocolos a la clase de controlador de vista: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 }
Implemente los métodos declarados en los protocolos
UICollectionViewDelegate
yUICollectionViewDataSource
: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 }
Ejecute su aplicación en el simulador (o en un dispositivo real) y ... ¡Et voilà! :)
Para más información: https://developer.apple.com/reference/uikit/uicollectionview
ok primero debes tener el IBOutlet de tu vista de colección e implementa los métodos como este
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 en la función agregas un archivo xib, luego debes crear esa extensión desde UICollectionViewCell, y cuando termines esto debes anular los siguientes métodos
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
}
y esto es todo, buena suerte