好的,所以我一直在尝试为我正在处理的应用程序制作一个类似的按钮,我正在使用解析作为后端。到目前为止,我可以在解析中更新like按钮,但是,我只能重新加载整个tableview而不仅仅是单个单元格。重新加载整个tableview有时会导致tableview向上或向下移动我相信因为不同大小的单元格。
@IBAction func topButton(sender: UIButton) {
let uuid = UIDevice.currentDevice().identifierForVendor.UUIDString
let hitPoint = sender.convertPoint(CGPointZero, toView: self.tableView)
let hitIndex = self.tableView.indexPathForRowAtPoint(hitPoint)
let object = objectAtIndexPath(hitIndex)
let cell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: hitIndex!) as TableViewCell
//var indexOfCell:NSIndexPath
//indexOfCell = hitIndex!
if object.valueForKey("likedBy") != nil {
var UUIDarray = object.valueForKey("likedBy")? as NSArray
var uuidArray:[String] = UUIDarray as [String]
if !isStringPresentInArray(uuidArray, str: uuid) {
object.addObject(uuid, forKey: "likedBy")
object.incrementKey("count")
object.saveInBackground()
//self.tableView.reloadData()
}
}
}
我已经使用正确的indexPath尝试了cellForRow,并且它总是返回PFTableViewCell不包含cellForRowAtIndexPath方法。我在论坛上看到有人能够创建自定义方法来重新加载单元格,而Parse的文档使用PAPCache来执行类似按钮。幸运的是,Parse页面上的like按钮的文档在Obj-C中,我在Swift中编写了我的应用程序。如果您想查看以下内容,请点击该页面的链接:https://www.parse.com/tutorials/anypic#like。第6.1节。
TD; LR 我不确定如何更新单元格,以便在没有cellForRowAtIndexPath方法的情况下不会重新加载整个tableview。也许自定义方法?也许PAPCache方法?
解决
if object.valueForKey("likedBy") != nil {
var UUIDarray = object.valueForKey("likedBy")? as NSArray
var uuidArray:[String] = UUIDarray as [String]
if !isStringPresentInArray(uuidArray, str: uuid) {
object.addObject(uuid, forKey: "likedBy")
object.incrementKey("count")
object.saveInBackground()
let count = object.valueForKey("count") as Int?
//cell.count.text = "\(count)"
self.tableView.reloadRowsAtIndexPaths([hitIndex!], withRowAnimation: UITableViewRowAnimation.None)
这只能正确地重新加载单元格,但是,现在我的整个tableview总是滚动到顶部,这是不理想的。
答案 0 :(得分:0)
我不明白你想用UUID做什么; hitpoint; hitIndex,我不明白你希望你的应用做什么,而且我没有经验和解析?我会评论你的问题,但我需要50个代表来做这个。请问这不是一个答案,而是一个问题。如果你指的是cellForRowAtIndexPath,你需要一个UITableView而不是一个单元格。