ios swift uiimageview uicollectionview uicollectionviewcell

ios - UICollectionViewCell outlet nil en clase pero funciona después de usar dequeueReusableCellWithReuseIdentifier



swift uiimageview (1)

Es posible que desee intentar llamar a doInit en awakeFromNib pero creo que el marco puede no haberse inicializado todavía ( aunque no lo awakeFromNib ) :

override func awakeFromNib() { super.awakeFromNib() doInit(frame) }

Dado que desea actualizar cornerRadius con respecto al marco de la vista, lo haría en layoutSubviews en layoutSubviews lugar, por lo que cualquier cambio de marco se reflejará directamente en el valor del radio de la esquina:

override func awakeFromNib() { super.awakeFromNib() imageView.layer.masksToBounds = true } override func layoutSubviews() { super.layoutSubviews() imageView.layer.cornerRadius = frame.size.width / 2 }

Actualización: como dijo, no usa un archivo de punta para cargar la vista, simplemente mueva imageView.layer.masksToBounds = true en init(frame: CGRect) y elimine awakeFromNib .

Hay varias publicaciones en puntos de venta nulos en una clase UICollectionViewCell como esta y esta , pero ninguna de las soluciones funcionó. El uso de una salida fuerte en lugar de una débil falló, la solución registerClass no se aplica puesto que la celda no usa un XIB personalizado, las fuentes de datos y los delegados están conectados correctamente, etc.

En este caso, la salida es un UIImageView que es nulo cuando se accede dentro de la clase UICollectionViewCell, pero funciona bien cuando se accede desde el exterior.

Código UICollectionView:

func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell { let cell = collectionView.dequeueReusableCellWithReuseIdentifier(AlbumCellIdentifier, forIndexPath: indexPath) as! AlbumCell cell.imageView.image = getThumbnail() cell.imageView.contentMode = .ScaleAspectFill cell.imageView.layer.masksToBounds = true cell.imageView.layer.cornerRadius = cell.frame.size.width / 2 return cell }

Código UICollectionViewCell:

class AlbumCell: UICollectionViewCell { @IBOutlet weak var imageView: UIImageView! override init(frame: CGRect) { super.init(frame: frame) doInit(frame) } required init?(coder aDecoder: NSCoder) { super.init(coder: aDecoder) doInit(frame) } private func doInit(frame: CGRect) { // Round corners imageView.layer.masksToBounds = true imageView.layer.cornerRadius = frame.size.width / 2 } }

Las esquinas redondeadas dentro de la clase UICollectionViewCell fallan porque imageView es nulo, pero las esquinas redondeadas dentro de la clase UICollectionView tienen éxito, por imageView que parece que imageView está conectado.

¿Por qué imageView nil está dentro de la clase UICollectionViewCell?