图像在swift3中的表视图的每个单元格中重复

时间:2017-09-22 07:07:46

标签: ios swift3

我的JsonData -

let imagestring : String? = (myData as AnyObject).value(forKey: "Post_mid_image") as? String
if imagestring != nil {
    let imageTrueString = "https://www.zdoof.com/" + imagestring!
    self.imageStringArray.append(imageTrueString )
}
if let NameString = (myData as AnyObject).value(forKey: "Name") as? String {
    self.nameStringArray.append(NameString)
}

当我尝试将其设置为表格视图单元格

func numberOfSections(in tableView: UITableView) -> Int {
    return 1
}

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
   return self.postLableArray.count 
}

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "reUse", for: indexPath)
    let myImage = cell.viewWithTag(30) as! UIImageView
    myImage.clipsToBounds = true
    if indexPath.row < imageStringArray.count {
        if let myImageString = imageStringArray[indexPath.row] as? String {
            let ImageUrl = URL.init(string: myImageString)
            myImage.kf.setImage(with: ImageUrl)

        }
    }

    return cell
}

图像在每个单元格中重复。为什么会这样?请帮忙

3 个答案:

答案 0 :(得分:0)

根据您提供的回复,您可以显示如下图像:

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let dict = myData as AnyObject
    let cell = tableView.dequeueReusableCell(withIdentifier: "reUse", for: indexPath)
    let myImage = cell.viewWithTag(30) as! UIImageView
    if dict["Post_mid_image"] != nil {
        let imageUrl = URL.init(string: strImageUrl)
        myImage.kf.setImage(with: imageUrl)
    } else {
        //Set placeholder image showing no image available
    }
    return cell
}

答案 1 :(得分:0)

问题在于表格视图的单元格可重用性,您必须处理它,您可以使用SDWebImage库在单元格中加载图像,或者您可以拥有自己的图像缓存来缓存具有键/值的图像,如下所示图片网址,因此在indexpath处动态检查图片网址,并使用该图片网址作为密钥加载缓存图片。

希望它有所帮助!!

答案 2 :(得分:0)

这是因为使用tableView.dequeueReusableCell(withIdentifier: "reUse", for: indexPath)

基本上每当您使用dequeueReusableCell(withIdentifier:,For:)时,它将对所有数据使用相同的单元格。这意味着屏幕上的单元格总数只会加载,对于所有其他单元格,它将使用具有不同值的相同单元格。

现在考虑一个场景,你在tableview中有500个单元格,但我们最多可以管理10-15个单元格,所以对于所有其他单元格,它将使用相同的单元格只修改单元格的值。

所以你可以在这里做的是,无论何时使用if声明,都不要忘记添加else

因为在一种情况下,如果单元格的背景设置为红色,那么我们需要为其他方案添加其他内容,因为只是重复了单元格。