从JSON中解析swift中的多个图像

时间:2017-08-09 19:21:07

标签: ios json swift uitableview uicollectionview

Json有多个图像,

img1

Json有多个图片的日期,我想在tableview中显示日期和该日期的第一张图片,工作正常。

img2

注意: 当单击tableview中的任何单元格时,在集合视图中显示该日期与所有图像,但是仅解析该日期的第一个图像,该图像仅显示在集合视图中

如何从Json解析所有图像并从tableview传递到集合视图,并将图像显示到搭配视图

img3

这是代码......

json Code    

                    if errorCode == "0" {


                       if let Media_list = jsonData["events"] as? [Any] {

                        self.Mediainfo.removeAll()


                        for i in 0 ..< Media_list.count {

                            if let MediaEventData = Media_list[i] as? [String: Any] {

                                var eventImages = MediaEventData["eventImages"] as? [[String: Any]]

                                if (eventImages?.count)! > 0 {

                                       let bannerImage = eventImages?[0]["bannerImage"] as? String

                                       print(bannerImage as Any)

                                        self.imageUrl = self.url+"/images/events/" + String(describing: bannerImage!)
                                        self.Mediainfo.append(MediaEvent(
                                        eventId: MediaEventData["eventId"]as?String,
                                        date: MediaEventData["date"]as?String,
                                        eventname: MediaEventData["eventName"]as?String,
                                        bannerImages: self.imageUrl


                                    )
                                )

                                  }
                            }






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


        let cell = tableView.dequeueReusableCell(withIdentifier: "Media", for: indexPath)as! MediaCustomTableViewCell

        let  row = indexPath.row

        let media = Mediainfo[row] as MediaEvent

        cell.DisplayDate.text = media.date

        cell.DisplayName.text = media.eventName

        cell.selectionStyle = .none

        cell.DisplayImage.downloadImageFrom(link:media.bannerImages, contentMode: UIViewContentMode.scaleAspectFit)

        return cell
    }


    override func tableView(_ tableView: UITableView, heightForFooterInSection section: Int) -> CGFloat {
        return CGFloat.leastNormalMagnitude
    }


    override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath)
    {

        let media = Mediainfo[(indexPath.row)] as MediaEvent


        let storyboard = UIStoryboard(name: "Main", bundle: nil)
        let tabBarController = storyboard.instantiateViewController(withIdentifier: "IMAGEVID") as! UITabBarController

        if let viewControllers = tabBarController.viewControllers,
            let imageController = viewControllers.first as? ImagesCollectionViewController {
            imageController.RecivedData1 = media.bannerImages
        }

        navigationController?.pushViewController(tabBarController, animated: true)




    }

集合视图代码:

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

        let cell = collectionView.dequeueReusableCell(withReuseIdentifier: reuseIdentifier, for: indexPath) as! ImageCollectionViewCell

        cell.ImageviewCell.downloadImageFrom(link:nameofImages[indexPath.row], contentMode: UIViewContentMode.scaleAspectFit)


        return cell


    }
请帮助我......!

1 个答案:

答案 0 :(得分:0)

 u can do soemthing like this
     

让eventImages = MediaEventData [&#34; eventImages&#34;]为? [[String:Any]]

if (eventImages?.count)! > 0 {

for i in 0...eventImages.count{
    let bannerImage = eventImages?[i]["bannerImage"] as? String
    self.imageUrl = self.url+"/images/events/" + String(describing: bannerImage!)

    self.Mediainfo.append(bannerImage)

  //  or like u did u can append to array

    self.Mediainfo.append(MediaEvent(
        eventId: MediaEventData["eventId"]as?String,
        date: MediaEventData["date"]as?String,
        eventname: MediaEventData["eventName"]as?String,
        bannerImages: self.imageUrl

    )

} }
In didselect

让media = Mediainfo [(indexPath.row)]作为MediaEvent           imageController.RecivedData1 = media.bannerImages

  

你这样做意味着你正在选择一个特定的细胞   您将传递给NextVC的索引。

     

如果要显示所有图像,则应将完整数组传递给   nextvc

     

您应该在Next VC中声明一个相同类型的Mediainfo数组的数组   并且喜欢

    EX:  imageController.array = Mediainfo