UIImageViews在单元格中重复

时间:2015-09-07 16:38:39

标签: ios swift uitableview uiscrollview uiimageview

我有一个包含UIScrollView的单元格,它将有一些UIImageViews,它将保存从Parse下载的图像。

这在我的tableview中加载前5个时效果很好,但在第五个之后,越来越多的UIImageViews堆叠在一起。

我认为问题在于我使用:

Collections.sort

这会在scrollView中添加并继续添加新的UIImageView。

我一直在尝试不同的东西去除UIImageViews,但我似乎无法正确实现它。

我回到了原点,但现在我知道造成这个问题的原因了。

这就是我从Parse下载图像的方式:

cell.scrollView.addSubview(myImageView)

这就是我将我的UIImageViews添加到我的scrollView中的方式:

photoQuery.findObjectsInBackgroundWithBlock {
    (objects:[AnyObject]?, error: NSError?) -> Void in

    if error == nil {
        for object in objects!{

            var arrayFile = [PFFile]() // hold both image into temp array

            if object.objectForKey("imageOne") != nil {
                self.resultsHasImageOneFile.append(object.objectForKey("imageOne") as! PFFile)
                arrayFile.append(object.objectForKey("imageOne") as! PFFile)
            }

            if object.objectForKey("imageTwo") != nil {
                self.resultsHasImageTwoFile.append(object.objectForKey("imageTwo") as! PFFile)

                arrayFile.append(object.objectForKey("imageTwo") as! PFFile)
            }
            // will add imageThree
            // will add imageFour
            // will add imageFive

            self.masterImageArray.append(arrayFile)//add temp array into Master Image array
            self.resultsTable.reloadData()
        }
    }
}

我已尝试使用以下内容删除单元格内容中的内容,但它表示已找到nil,这会崩溃。

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {

    // configure cell....

    var imageArray = masterArray[indexPath.row]

    cell.imageScrollView.tag = indexPath.row // do something with this?????

    for var i = 0; i < imageArray.count; i++ {

        var myImageView: UIImageView = UIImageView()

        myImageView.frame.size.width = imageWidth
        myImageView.frame.size.height = imageHeight
        myImageView.frame.origin.x = xPosition

        imageArray[i].getDataInBackgroundWithBlock{
            (imageData: NSData?, error: NSError?) -> Void in

            myImageView.image = UIImage(data: imageData!)
        }

        cell.imageScrollView.addSubview(myImageView)

        xPosition = imageWidth
        scrollViewContentSize += imageWidth

        cell.imageScrollView.contentSize = CGSize(width: scrollViewContentSize, height: imageHeight)

        cell.imageScrollView.tag = indexPath.row // do something with this?????
    }
}

在我的FriendsFeedTableViewCell类中,我只有一个标签,以及一个名为

的UIScrollView
func tableView(tableView: UITableView, didEndDisplayingCell cell: UITableViewCell, forRowAtIndexPath indexPath: NSIndexPath) {

    var cell = FriendsFeedTableViewCell()
    cell.imageScrollView.removeFromSuperview()
}

如何正确删除已创建的UIImageViews?

1 个答案:

答案 0 :(得分:0)

我相信您通过访问Parse Twice做了太多工作,您应该下载每个图像一次并将它们插入到单个对象数组中。示例:

    var photoQuery = PFQuery(className: "")
photoQuery.findObjectsInBackgroundWithBlock { (objects:[AnyObject]?, error:NSError?) -> Void in

    if error == nil
    {
        if let objects = objects as? [PFObject]
        {
            for singleObject in objects
            {
                var ImageDataToDownload = singleObject["images"] as! PFFile
                ImageDataToDownload.getDataInBackgroundWithBlock({ (dataToget:NSData?, error:NSError?) -> Void in
                    if error == nil
                    {
                        if let  image = UIImage(data: dataToget!) {
                                // pass this image to  your array 
                                // reload tableview
                        }
                    }
                })
             }}}}

然后在cellForRowAtIndexPath()

    cell.imageView.image = arrayFromQuery[indexPath.row]
  then you take care of your scrollview inside that cell