Хорошо, поэтому я пытался сделать кнопку «Мне нравится» для приложения, над которым я работаю, и я использую синтаксический анализ в качестве бэкэнда. Пока я могу обновить кнопку «Мне нравится» в анализе, однако я могу перезагрузить только всю таблицу, а не только одну ячейку. Перезагрузка всего табличного представления иногда приводит к тому, что табличное представление перемещается вверх или вниз, я полагаю, из-за ячеек разного размера.
@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()
}
}
}
Я уже пробовал cellForRow с правильным indexPath, и он всегда возвращает, что PFTableViewCell не содержит метод cellForRowAtIndexPath. Я читал на форуме, что кто-то смог создать собственный метод для перезагрузки ячейки, а документация Parse использует PAPCache для создания кнопки «Нравится». К счастью для меня, документация для кнопки «Мне нравится» на странице Parse находится на Obj-C, и я написал свое приложение на Swift. Вот ссылка на страницу, если хотите: https://www.parse.com/tutorials/anypic#like. Раздел 6.1.
TD;LR Я не знаю, как обновить ячейку, чтобы все табличное представление не перезагружалось без метода cellForRowAtIndexPath. Может быть, Пользовательский метод? Может быть, метод 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)
Это правильно перезагружает только ячейку, однако теперь все мое табличное представление всегда прокручивается вверх, что не идеально.