从JSON数组到UICollectionView的多个映像

时间:2017-09-29 11:34:37

标签: ios json swift uicollectionview

我正在使用tabman作为布局的标签。在我的情况下,有4个标签,每个标签包含2到3个图像。我在UICollectionView显示图片。

我的JSON:

"PhotoList": [
    {
        "ID": 0,
        "DaySeq": 1,
        "ImgPath": "Images\\1.jpg"
    },
    {
        "ID": 0,
        "DaySeq": 1,
        "ImgPath": "Images\\2.jpg"
    },
    {
        "ID": 0,
        "DaySeq": 2,
        "ImgPath": "Images\\3.jpg"
    },
    {
        "ID": 0,
        "DaySeq": 2,
        "ImgPath": "Images\\4.jpg"
    },
    {
        "ID": 0,
        "DaySeq": 3,
        "ImgPath": "Images\\.jpg"
    },
    {
        "ID": 0,
        "DaySeq": 4,
        "ImgPath": "Images\\6.jpg"
    },
    {
        "ID": 0,
        "DaySeq": 5,
        "ImgPath": "Images\\7.jpg"
    }
]

我想在标签1中有一个UICollectionView,我想只显示那些有'DaySeq'1的图像。就像在其他标签中一样,我希望图像带有'DaySeq'2。

我在代码中尝试的是什么:

 override func viewDidLoad() {
    super.viewDidLoad()
    Alamofire.request("http://bestapp.in/api/Package/GetItineraryByPackageID/2").responseJSON(completionHandler: { (responseData) in

        if ((responseData.result.value) != nil) {

            let swiftyJSONVar = JSON(responseData.result.value!)
            if let resData = swiftyJSONVar["DayDescrList"].arrayObject,
            let resImg = swiftyJSONVar["PhotoList"].arrayObject
            {

            self.arrRes = resData as! [[String:AnyObject]]
            self.arrImg = resImg as! [[String:AnyObject]]

            self.dataSource = self
            self.bar.location = .top
            }
        }
    })
}
func viewControllers(forPageboyViewController pageboyViewController: PageboyViewController) -> [UIViewController]? {
    let storyboard = UIStoryboard(name:"Main",bundle:Bundle.main)

    var viewControllers = [UIViewController] ()
    var tabBarItems : [TabmanBar.Item] = []

    for j in 0 ..< self.arrImg.count {
        for var k in 0 ..< j {
        k += 1
        if k == self.arrImg[j]["DaySeq"] as! Int {
            let vc = storyboard.instantiateViewController(withIdentifier: "childvc") as! childvc
            vc.imgURL = self.arrImg[j]["ImgPath"] as! String
            print(self.arrImg[j]["ImgPath"] as! String)
            self.array.append(self.arrImg[j]["ImgPath"] as! String)
        }

       print(array)
    }

    }
    print(array)
    let vc = storyboard.instantiateViewController(withIdentifier: "childvc") as! childvc
    vc.array = array
    self.bar.items = tabBarItems
    return viewControllers

}

1 个答案:

答案 0 :(得分:1)

  1. 创建模型示例:

    class ImagesModel {
      var id: Int?
      var path: String?
      var daySeq: Int?
    
      func parseWith(json: JSON){
         self.id = json["ID"].intValue
         self.path = json["ImgPath"].intValue
         self.daySeq = json["DaySeq"].intValue
      }
    }
    
  2. 在您的班级中创建ImagesModel数组:

    var imagesModelArray = [ImagesModel]()
    
  3. 只需将数组解析为此模型示例:

    let photosListArray = json["PhotoList"].arrayValue
    for objects in photosListArray{
       let model = ImagesModel()
       model.parseWith(json: objects)
       self.imagesModelArray.append(model)
    }
    
  4. 之后在集合View numberOfItems方法中,你需要根据那个标签对数据进行排序。

    func collectionView(_ collectionView: UICollectionView, 
         numberOfItemsInSection section: Int) -> Int {
         if tab == 0{
             return self.imagesModelArray.filter({$0.daySeq == 0})
         }else if tab == 1{
             return self.imagesModelArray.filter({$0.daySeq == 1})
         }
         ///MORE CONDITIONS
         //At the End
         return 0
    }
    
  5. 之后在cellForItem中生成这些类型的过滤数组,并从这些过滤后的数组中获取图像。

    享受斯威夫特。

    也许它有帮助。如有任何疑问请发表评论