我有一个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
}
如果有人可以提供帮助,那就太棒了!!
答案 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