UICollectionView没有从数组填充数据

时间:2019-09-09 21:41:47

标签: swift uicollectionview

我有115个对象的数组,其中包含Firebase的名称和照片url字符串。打印数据会显示结果,所以我知道它正确地提取了数据。

问题在于单元永远不会被数据填充。

如果我在类DJProfileCell:UICollectionViewCell中添加一个print(name),它将永远不会被调用,所以我相信这就是问题所在。

         class VLCDJProfileViewController: UICollectionViewController, UICollectionViewDelegateFlowLayout {

            @IBOutlet weak var similarArtistsCollection: UICollectionView!

            var ref: DatabaseReference!
            let profileCellID = "cellId"
            var djObject = SimilarDJ(image: "image1", name: "name1")
            var djsSimilarArray = [SimilarDJ]()


        override func viewDidLoad() {
                super.viewDidLoad()
                ref = Database.database().reference()
                loadDJs()

                collectionView?.register(DJProfileCell.self, forCellWithReuseIdentifier: profileCellID)

            }

        func loadDJs(){

                let allDJs = self.ref.child("DJ")

                allDJs.observeSingleEvent(of: .value, with: { snapshot in
                    for child in snapshot.children {
                        let snap = child as! DataSnapshot
                        let djsDict = snap.value as! [String: Any]
                        let PhotoUrl = djsDict["PhotoUrl"] as! String
                        let name = djsDict["name"] as! String + "    "


                        self.djObject = SimilarDJ   (image: PhotoUrl, name: name + "   ")
                        self.djsSimilarArray.append(self.djObject)


                        self.similarArtistsCollection.reloadData();


                    }
                })
            }

        override func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
            return djsSimilarArray.count
        }

        override func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
            let cell = collectionView.dequeueReusableCell(withReuseIdentifier: profileCellID, for: indexPath) as! DJProfileCell

            cell.djprofile = djsSimilarArray[indexPath.item]

            return cell
        }

    class DJProfileCell: UICollectionViewCell {


        var djprofile: SimilarDJ?  {
            didSet {

                guard let djImageProfile = djprofile?.image else {return}
                guard let djNameProfile = djprofile?.name else {return}

                let url = URL(string: djImageProfile)
                djImageView.kf.indicatorType = .activity
                djImageView.kf.setImage(with: url)
                djImageLabel.text = djNameProfile
                djImageLabel.adjustsFontSizeToFitWidth = true


            }
        }

        override init(frame: CGRect) {
            super.init(frame: frame)
setup()

        }

func setup(){


    self.backgroundColor = .white
    self.addSubview(djImageView)
    self.addSubview(djImageLabel)

    }



        let djImageView: UIImageView = {

            let iv = UIImageView()
        //    iv.contentMode = .scaleAspectFit
        //    iv.backgroundColor = .green
            return iv

        }()

        let djImageLabel: MarqueeLabel = {

            let label = MarqueeLabel()
            label.text = "Name"
            label.textColor = UIColor.black
            label.font = label.font.withSize(14)

            label.textAlignment = .center

            return label

        }()



        required init?(coder aDecoder: NSCoder) {
            fatalError("init has not been implemented")
        }

    }

    struct SimilarDJ {

        let image: String?
        let name: String?


    }

1 个答案:

答案 0 :(得分:0)

单元格类中的

-djImageView和djImageLabel永远不会添加到视图的层次结构中。我看不到IBOutlet,也看不到addSubview()。