UIImage中的Swift /图像数组仅显示最后一次图像多次显示

时间:2016-03-04 10:52:59

标签: ios swift

我有以下代码:

    var posts = [EventPosts]() {
    didSet {
        eventsCollectionView.reloadData()
    }
}

    //MARK:PLACEHOLDER IMAGES
    var eventImagesPlaceholder: [UIImage] = [
    UIImage(named: "wildstyle.jpg")!,
    UIImage(named: "geilesleben.jpg")!]  

func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {

    let event = posts[indexPath.row]
    let cell = eventsCollectionView.dequeueReusableCellWithReuseIdentifier("eventsCell", forIndexPath: indexPath) as! EventsCollectionViewCell

    for element in eventImagesPlaceholder {
        cell.eventsImageView.image = element
    }

    if Reachability.isConnectedToNetwork() == true {
        offlineModusLabel.hidden = true
        let imgURL = NSURL(string: event.imageUrl)!
        cell.eventsImageView.sd_setImageWithURL(imgURL)            
        activityIndicator.stopAnimating()
    } else {           
        offlineModusLabel.hidden = false
    }


    return cell
}

如果我打开互联网,将解析并正确显示所需来源的四张图像。如果我关闭互联网,只会显示最后一个占位符图像4次。如果我最后设置wildstyle.jpg,它会显示四次。如果我最后设置geilesleben.jpg,只有那个。

如何显示两个占位符图像。最佳只有一次。

非常感谢帮助。

4 个答案:

答案 0 :(得分:2)

添加

override func prepareForReuse() {
    self.eventsImageView.image = nil
}

在你的手机课上

答案 1 :(得分:2)

您可以使用它,两个占位符图像交替显示在所有单元格中。

如果您向阵列添加更多占位符图像,则会自动考虑项目数。

func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {

  let event = posts[indexPath.row]
  let cell = eventsCollectionView.dequeueReusableCellWithReuseIdentifier("eventsCell", forIndexPath: indexPath) as! EventsCollectionViewCell

  if Reachability.isConnectedToNetwork() == true {
    offlineModusLabel.hidden = true
    let imgURL = NSURL(string: event.imageUrl)!
    cell.eventsImageView.sd_setImageWithURL(imgURL)
    activityIndicator.stopAnimating()
  } else {
    offlineModusLabel.hidden = false
    cell.eventsImageView.image = eventImagesPlaceholder[indexPath.row % eventImagesPlaceholder.count]
  }

  return cell
}

在您的代码中始终显示最后一张图像,因为重复循环会将所有图像分配到同一图像视图并保留最后一张图像。

答案 2 :(得分:1)

for element in eventImagesPlaceholder {
        cell.eventsImageView.image = element
    }

将此循环语句更改为此

let element = eventImagesPlaceholder.objectAtIndex(indexPath.row) as! UIImage
   cell.eventsImageView.image = element

答案 3 :(得分:1)

for element in eventImagesPlaceholder {
    cell.eventsImageView.image = element
}

这会针对您拥有的每个单元格进行迭代。基本上每个细胞都可以获得每个图像并保持最后一个。很直接

你想做的是这样的:

cell.eventsImageView.image = eventImagesPlaceholder[someKindOfIndex]

而不是for循环。 就像你知道占位符变量中有4个单元格和4个图像一样,只需将indexPath.row作为“someKindOfIndex”