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?