TableView单元格显示最后上传的图像以解析所有单元格?

时间:2016-01-23 19:25:16

标签: ios swift uitableview parse-platform

我有一个PFQueryTableViewController,它从解析中下载我的图像。

我让它工作正常,在所有单元格中显示正确的图像,但今天我也添加了一个标题单元格,现在我有headerCell显示正确的信息并且也在改变(这正是我想要它的方式) be)但是现在显示imageView的单元格显示了为所有单元格上传的最新图像。应该做的不是不同的形象......?!

这是控制我的tableview的代码。但是我无法理解错误!

对象,是var对象:PFObject?

    override func tableView(tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
        return 46
    }

    override func numberOfSectionsInTableView(tableView: UITableView) -> Int {
        return objects!.count
    }



    override func tableView(tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
        let headerCell = tableView.dequeueReusableCellWithIdentifier("PostHeader") as! PostHeaderTableViewCell


        let object = objects![section]
        let username = object.objectForKey("user")?.objectForKey("username") as? String
        headerCell.usernameLabel.text = username!.capitalizedString


        let dataFormatter: NSDate = NSDate(timeIntervalSinceNow: -4)
        NSLog("Time Ago: %@", dataFormatter.shortTimeAgoSinceNow())
        headerCell.timeLabel.text = dataFormatter.shortTimeAgoSinceDate((object.createdAt)!)

        if (object.objectForKey("user")!.objectForKey("profilePicture") != nil)
        {
            let userImageFile:PFFile = object.objectForKey("user")!.objectForKey("profilePicture") as! PFFile
            userImageFile.getDataInBackgroundWithBlock({ (imageData: NSData?, error: NSError?) -> Void in
                headerCell.postProfilePicture.image = UIImage(data: imageData!)
                headerCell.postProfilePicture.layer.cornerRadius = 0.1 * headerCell.postProfilePicture.bounds.size.width
                headerCell.postProfilePicture.clipsToBounds = true

            })
        }


        return headerCell
    }


    override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {


        return 1
    }




    override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath, object: PFObject?) -> PFTableViewCell?
    {
        let cell = tableView.dequeueReusableCellWithIdentifier("cell", forIndexPath: indexPath) as! BaseTableViewCell

        cell.titleLabel?.text = object?.objectForKey("title") as? String

        let imageFile = object?.objectForKey("imageFile") as? PFFile
        cell.cellImageView?.image = UIImage(named: "circle")
        cell.cellImageView?.file = imageFile
        cell.cellImageView.loadInBackground()


        return cell
    }

    override func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat
    {
        if indexPath.row + 1 > self.objects?.count
        {
            return 44
        }
        let height = super.tableView(tableView, heightForRowAtIndexPath: indexPath)
        return height
    }

如果有人可以提供帮助,那就太棒了!!

1 个答案:

答案 0 :(得分:0)

我认为您的问题与您正在使用的覆盖cellForRowAtIndexPath方法有关。由于通用PFQueryTableViewController仅适用于一个部分,因此当您使用带有签名(tableView, indexPath, object)的方法而不是带有签名(tableView, indexPath)的默认方法时,该方法将始终提取#你在numberOfRowsInSection返回了。我建议您改为使用常规cellForRowAtIndexPath(tableView: UITableView, indexPath: NSIndexPath) -> UITableViewCell!,然后根据indexPath获取对象。

看起来像这样:

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell!
{
    let cell = tableView.dequeueReusableCellWithIdentifier("cell", forIndexPath: indexPath) as! BaseTableViewCell
    if let object = objects![indexPath.row] as? PFObject {
        cell.titleLabel?.text = object?.objectForKey("title") as? String

        let imageFile = object.objectForKey("imageFile") as? PFFile
        cell.cellImageView?.image = UIImage(named: "circle")
        cell.cellImageView?.file = imageFile
        cell.cellImageView.loadInBackground()
    }
    return cell
}

然后,这将为您提供您正在寻找的相应索引路径的图像,而不是始终使用第一个。

您也可以尝试在调用该方法时打印indexPath.row,以便查看indexPath是否正在发生变化。

EIDT:实际上似乎甚至可能无效。您可以尝试按照教程here进行操作,但他们明确提到PFQueryTableViewController并不适用于多个部分。你可能最好还是继承常规的UITableViewController