自定义集合视图单元格

时间:2017-05-22 05:34:43

标签: ios arrays swift

我有一个包含自定义单元格的集合视图。我想通过从两个地方获取数据来填充带有图像的单元格。一个是默认图像数组,另一个是解析xml web services后获取的数组。因此,最终的数组计数是默认数组计数和Web服务的数组计数的总和。

如何在cellForItemAt集合视图方法中获取图像? 任何人都可以在这方面帮助我吗?

2 个答案:

答案 0 :(得分:0)

设置

collectionView.delegate = nil
 collectionView.dataSource = nil

直到您从xml web services获取所有图片。当您获得所有数据后,就像您说的那样更新dataSource数组

count = default array count + array count from web services

然后设置collectionView的delegatedataSource。然后在

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

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

        /// Show Image Code here
        let url : String = dataSource[indexPath.row]
       if let _image = UIImage(named: url){ 
          // This If Will Load the image if it save locally
       } else {
         // Image does not save locally, download image from URL
       }

        return cell
    }

我已经更新了我的答案,请查看并告诉我您是否发现任何困难。 有一件事你可以使用SDWebImage第三方从URL下载图像。

答案 1 :(得分:0)

来自上述问题

let cell:SubCategoryCollectionViewCell = self.collectionview3.dequeueReusableCell(withReuseIdentifier‌​: "Cell2", for: indexPath) as! SubCategoryCollectionViewCell

if defaultAnimalArray.count-1 >= indexPath.row{ // ex: 0...7 
let item = defaultAnimalArray[indexPath.row]
cell.subThumbImg?.image = UIImage(named: item as! String)
}else{
//If now defaultAnimalArray.count = 8, indexPath = 8 , But array = 0...4, then,
let item = arrayFromAPI[indexPath.row-defaultAnimalArray.count] // 8-8 = 0
cell.subThumbImg?.image = UIImage(named: item as! String)
}
return cell

备选方案1: -

defaultArray声明为var

return defautlArray.count+arrayFromAPI.count之前合并图像数组。 i.e., defaultArray = defaultArray+arrayFromAPI和返回变量变为return defaultArray.count,并且没有变更cellForItemAtIndexPath

备选方案2:

defaultArray声明为var,不要创建arrayFromAPI。只需在defaultArray XML Parsing中添加新图片即可。附加新图片后reload UICollectionView并且返回变量变为return defaultArray.count

备选方案3:

使用相同的代码,item上的cellForItemAtIndexPath变为,

let item = defaultAnimalArray+arrayFromAPI[indexPath.row]