我在TableView中放置了一个UICollectionView来显示图像 水平。我想每行只添加4个图像,当然这些图像在每一行中应该是不同的。我的代码是如此
func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
return 4;
}
func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCellWithReuseIdentifier("imageCell", forIndexPath: indexPath) as! ImageCell
var imageName:String?
if(Constants.counter >= 1 && Constants.counter <= 4) {
imageName = DataSource.eyeColorArray.objectAtIndex(indexPath.row) as? String
}
if(Constants.counter >= 5 && Constants.counter <= 8) {
imageName = DataSource.maskArray.objectAtIndex(indexPath.row)as? String
}
var concurrentQueue : dispatch_queue_t?
concurrentQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)
dispatch_async(concurrentQueue!) {
let img = UIImage(named: imageName!)
cell._imgView.image = img
}
Constants.counter = Constants.counter + 1
print(Constants.counter)
return cell
}
我的尝试是使用计数器变量 Constants.counter ,这有助于我每4步从不同的数组中选择图像。所以这意味着..在开始时,我的第一行从 DataSource.eyeColorArray 获取图像。在我的第二行中,图像是从 DataSource.maskArray 中选取的。
在这种情况下的问题是,我的第一行和第二行填充了从最后一个数组中拾取的图像(DataSource.maskArray)
有什么想法吗? 最好的祝福, 纳扎尔
答案 0 :(得分:0)
我并不完全确定是什么触发了您看到的行为,但您在Counter
处使用此处会对collectionView:cellForItemAtIndexPath:
的调用方式做出一些不安全的假设,我认为您应该避免这种情况方法
当您加载并滚动浏览集合视图时,可以为显示的每个索引路径调用cellForItemAtIndexPath
。每个索引路径将多次调用它。它可以按升序或降序调用索引路径,以任意顺序为一组索引路径调用它是有效的。
您的Counter
会导致这些单元格的内容取决于cellForItemAtIndexPath
的调用顺序和次数。如果您改为根据索引路径参数的节和行选择图像,则可以实现更安全,更可预测的实现。