想通过从firebase下载数据来在tableView里面添加一个collectionView来显示。 ios App Swift

时间:2019-04-30 09:03:56

标签: ios swift firebase firebase-realtime-database

想要通过从Firebase下载数据以显示在UICollectionView内添加UITableView     现在我已经完成了界面部分,但是我陷入了问题,无法将Firebase中的数据显示在UICollectionView中。

我无法运行collectionView.reloadData(),因为UICollectionView的课程不同,该如何解决?

func showImageRewardData(rewardID:String) {
        let databaseRef = Database.database().reference().child("reward").child(rewardID).child("rewardImage")
        databaseRef.observe(DataEventType.value, with: { (Snapshot) in
            if Snapshot.childrenCount>0{
                self.rewardDataArr.removeAll()
                for rewardImage in Snapshot.children.allObjects as! [DataSnapshot]{
                    let rewardObject = rewardImage.value as? [String: AnyObject]

                    if(rewardObject?["imageURL"] != nil){
                        let imageUrl = rewardObject?["imageURL"]
                        let Data = rewardDetailClass(rewardImage: imageUrl as? String)
                        self.rewardDataArr.insert(Data, at: 0)          
                    }

2 个答案:

答案 0 :(得分:0)

YOURVIEWCONTROLLER.SWIFT

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let CellIdentifier: String = "Cell_NotesList"
    var cell: Cell_NotesList? = (tableView.dequeueReusableCell(withIdentifier: CellIdentifier) as? Cell_NotesList)

    if cell == nil {
        let topLevelObjects: [Any] = Bundle.main.loadNibNamed("Cell_NotesList", owner: nil, options: nil)!
        cell = (topLevelObjects[0] as? Cell_NotesList)
        cell?.selectionStyle = .none
    }
    cell?.reloadCollectionView(arr: arrofofthumbImages)
    return cell!
}

YourCell.SWIFT

class Cell_NotesList: UITableViewCell {

    var imagesArr = NSMutableArray()

    override func awakeFromNib() {
        collectionView.register(UINib.init(nibName: "cell_ImageCollection", bundle: nil), forCellWithReuseIdentifier: "cell_ImageCollection")
        super.awakeFromNib()
    }

    override func setSelected(_ selected: Bool, animated: Bool) {
        super.setSelected(selected, animated: animated)
        // Configure the view for the selected state
    }
}



extension Cell_NotesList : UICollectionViewDataSource {

    func reloadCollectionView(arr:NSMutableArray) {
        imagesArr = arr
        collectionView.reloadData()
        self.layoutIfNeeded()
    }

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

    func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
        let cell : cell_ImageCollection? = collectionView.dequeueReusableCell(withReuseIdentifier: "cell_ImageCollection", for: indexPath) as? cell_ImageCollection
        //YOUR CODE HERE
        return cell!
    }

    func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
    }
}

extension Cell_NotesList : UICollectionViewDelegateFlowLayout {
    func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
        return CGSize(width: 120.0, height: 120.0)
    }
}

extension UICollectionViewCell {
    var indexPath: IndexPath? {
        return (superview as? UICollectionView)?.indexPath(for: self)
    }
}

答案 1 :(得分:0)

在扩展UICollectionView的类中,放置一个类似setter的方法

func setData(data: String){
    // Update your cell view here like
    Label.text = data
}