2017-09-25 1 views
0

Ich habe eine UICollectionView, die Bilder in einem Wasserfall-Layout präsentiert, die perfekt funktioniert. Ich versuche jetzt, eine Beschreibung für jedes Bild hinzuzufügen. Die Herausforderung ist, ich versuche, das UILabel programmgesteuert hinzuzufügen, aber es wird nicht angezeigt. Ich bin sicher, dass label.text Text enthält.Programmatisch ein UILabel zu einer UICollectionViewCell hinzufügen

class NTWaterfallViewCell :UICollectionViewCell, NTTansitionWaterfallGridViewProtocol{ 

    var photoName = "" 
    var imageName : String? 

    var imageViewContent : UIImageView = UIImageView() 
    var label:UILabel = UILabel() 

    required init?(coder aDecoder: NSCoder) { 
     fatalError("init(coder:) has not been implemented") 
    } 
    override init(frame: CGRect) { 
     super.init(frame: frame) 
     backgroundColor = UIColor.lightGray 
     contentView.addSubview(imageViewContent) 
     contentView.addSubview(label) 
    } 
    override func layoutSubviews() { 
     super.layoutSubviews() 
     imageViewContent.frame = CGRect(x: 0, y: 0, width: frame.size.width, height: frame.size.height) 
     imageViewContent.loadImageWithURL(imageName!) 

     label = UILabel(frame: CGRect(x: 0, y: 0, width: 200, height: 21)) 
     label.center = CGPoint(x: 160, y: 285) 
     label.textAlignment = .center 
     label.text = photoName 
    } 

Antwort

1

Sie erstellen zwei UILabel Instanzen in Ihrem Code - die erste in var label: UILabel = UILabel() ist, und dieser wird in init zu Ihrem content hinzugefügt.

Später überschreiben Sie self.label mit einer neuen Instanz in Ihrem layoutSubViews(), aber diese neue Instanz wird nie zum ContentView hinzugefügt.

Ordnen Sie den Code so an, dass nur eine Instanz erstellt und hinzugefügt wird.

Verwandte Themen