He buscado mucho por crear un UICollectionView
programática, pero ninguno de ellos sugiere la forma más simple de usarlo, cómo agregar una label o una image a UICollectionViewCell
. La mayoría de los sitios sugieren que la implementación de UICollectionView
es igual que UITableView
, pero la principal diferencia viene cuando intentamos agregar cualquier image. En UITableView
podemos asignar imagesViews en el método cellForRow
donde cell == nil
y asignar imágenes donde ( cell != nil
). pero aquí, en el caso del método UICollectionView ItemAtIndexPath
, no hay condición ( cell == nil
) como en UITableView
de CellForRow
. Como resultado, no podemos asignar de manera efectiva variables de UImageView
s o tags, etc. en el método itemAtIndexPath
. ¿Quiero saber si hay alguna alternativa que no sea subclasificar UICollectionViewCell
y asignar variables en esa Clase personalizada? ¿Puede alguien ayudar, cualquier ayuda es apreciada?
No hay alternativa para crear o asignar celdas en el método itemAtIndex. Necesitamos registrar la class personalizada para crear cualquier vista dentro de la class personalizada. algo como esto :
[UICollectionView registerClass:[CustomCollectionViewClass class] forCellWithReuseIdentifier:@"cellIdentifier"];
aquí está el mejor enlace que encontré útil. Espero que ayude a los demás
Rápido:
override func viewDidLoad() { super.viewDidLoad() let layout: UICollectionViewFlowLayout = UICollectionViewFlowLayout() layout.sectionInset = UIEdgeInsets(top: 20, left: 10, bottom: 10, right: 10) layout.itemSize = CGSize(width: 70, height: 70) let demoCollectionView:UICollectionView = UICollectionView(frame: self.view.frame, collectionViewLayout: layout) demoCollectionView.dataSource = self demoCollectionView.delegate = self demoCollectionView.registerClass(UICollectionViewCell.self, forCellWithReuseIdentifier: "Cell") demoCollectionView.backgroundColor = UIColor.whiteColor() self.view.addSubview(demoCollectionView) } func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { return 27 } func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell { let cell = collectionView.dequeueReusableCellWithReuseIdentifier("Cell", forIndexPath: indexPath) cell.backgroundColor = UIColor.lightGrayColor() return cell } func collectionView(collectionView: UICollectionView, didSelectItemAtIndexPath indexPath: NSIndexPath) { print("User tapped on item \(indexPath.row)") }