Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
723 views
in Technique[技术] by (71.8m points)

ios - How to display dynamically data from Server in CollectionViewCell in TableViewCell with swift3?

I got my json link data from TableViewCell , and then retrieve that data from server and display in collectionView with related TableViewCell data. How to display this data in swift3? Please, help me.

I got url link (mainThemeList.main_associated_url,main_name) from TableViewCell.

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {



        let mainThemeList = mainHomeThemeTable[(indexPath as NSIndexPath).row]

        let cell = tableView.dequeueReusableCell(withIdentifier: "homecell") as! HomeCategoryRowCell



         DispatchQueue.main.async {
            cell.categoryTitle.text = mainThemeList.main_name
            cell.mainAssociatedURL.text = mainThemeList.main_associated_url


            self.prefs.set(mainThemeList.main_name, forKey: "main_name")
            cell.categoryTitle.font = UIFont.boldSystemFont(ofSize: 17.0)
            cell.collectionView.reloadData()

        }

        DispatchQueue.main.async {

            self.retrieveDataFromServer(associated_url: mainThemeList.main_associated_url,main_name: mainThemeList.main_name)
        }

        return cell
    }

And then data related url link data from Server.

 private func retrieveDataFromServe(associated_url : String , main_name: String) {
        SwiftLoading().showLoading()
        if Reachability().isInternetAvailable() == true {

            self.rest.auth(auth: prefs.value(forKey: "access_token") as! String!)
            rest.get(url: StringResource().mainURL + associated_url ,  parma: [ "show_min": "true" ], finished: {(result : NSDictionary, status : Int) -> Void in


                self.assetsTable.removeAll()
                if(status == 200){
                    let data = result["data"] as! NSArray
                    if (data.count>0){
                        for item in 0...(data.count) - 1 {

                            let themes : AnyObject = data[item] as AnyObject
                            let created = themes["created"] as! String
                            let assets_id = themes["id"] as! Int
                            let name = themes["name"] as! String
                            var poster_img_url = themes["poster_image_url"] as! String
                            let provider_id = themes["provider_id"] as! Int

                            poster_img_url = StringResource().posterURL + poster_img_url

                            self.assetsTable.append(AssetsTableItem(main_name: main_name,created: created,assets_id: assets_id, name: name, poster_image_url: poster_img_url,provider_id: provider_id))

                        }
                    }

                    SwiftLoading().hideLoading()

                }else{

                    SwiftLoading().hideLoading()

                }
            })
        }
    }

Retrieve data from Server data store in assetsTable.

And then assetsTable data display in CollectionViewCell.

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {



    let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "videoCell", for: indexPath) as! HomeVideoCell

            cell.movieTitle.text = list.name
            cell.imageView.image = list.image



    return cell

}

My problem is collectionViewCell data are duplicate with previous assetsTable data and didn't show correct data in CollectionView.

enter image description here

My tableViewCell show (Action, Drama) label and My CollectionViewCell show movies Name and Movie Image. I retrieve data for CollectionViewCell from server but CollectionViewCell didn't display related data.

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

in HomeVideoCell Subclass clean up data in prepareforreuse

override func prepareForReuse() {
    super.prepareForReuse()
    self.movieTitle.text = ""
    self.imageView.image = nil
}

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...