如何从单元格中触发reloadRowsAtIndexPaths?

时间:2015-11-27 02:19:08

标签: ios swift

我试图在我的UITableCells上添加上下投票

这就是我的意思:

enter image description here

每当我点击向上和向下按钮时,它应该立即更新单元格

以下是我填写表格的方式:

我的UITableView中的代码块

...
...

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

func getCellForIndexPath(indexPath: NSIndexPath) -> TableCell {
  let cell = tblView.dequeueReusableCellWithIdentifier("TableCell") as! TableCell
  if generalPosts.count != 0 {
    let post = generalPosts[indexPath.row]
    cell.post.text = post.value["post"] as? String
    let test = post.value["time"] as? NSNumber
    let time = Double(test!)
    cell.time.text = getTimeAgo(time)
    cell.votes.text = String(Int((post.value["votes"] as? NSNumber)!))
    cell.snapShot = post
  }
  return cell
}
...
...

这是我的UITableCell

import UIKit

class TableCell: UITableViewCell {
  @IBOutlet var userImage: UIImageView!
  @IBOutlet var post: UILabel!
  @IBOutlet var time: UILabel!
  @IBOutlet var votes: UILabel!
  @IBOutlet var thumbsUp: UIButton!
  @IBOutlet var thumbsDown: UIButton!

  var snapShot: FDataSnapshot? = nil
  var newValue: Int = 0

  override func layoutSubviews() {
    newValue = Int(snapShot?.value["votes"] as! NSNumber)
    thumbsUp.addTarget(self, action: "upOne:", forControlEvents: .TouchUpInside)
    thumbsDown.addTarget(self, action: "downOne:", forControlEvents: .TouchUpInside)
  }

  @IBAction func upOne(sender: UIButton) {
    let ref = snapShot!.ref
    newValue = newValue + 1
    ref.updateChildValues(["votes": newValue])
  }

  @IBAction func downOne(sender: UIButton) {
    let ref = snapShot!.ref
    newValue = newValue - 1
    ref.updateChildValues(["votes": newValue])
  }
}

向上和向下按钮它们有点工作,但我必须刷新页面才能获得正确的投票数量。如果单击其中一个向上或向下按钮,如何刷新单元格?

2 个答案:

答案 0 :(得分:1)

表格不需要重新加载单元格来更新,单元格肯定可以自己处理

在cellForRowAtIndexPath中的

,传递整个post对象,而不仅仅是“投票”中的值

然后在你的一个上下功能中放入

self.votes.text = String(Int((post.value["votes"] as? NSNumber)!))

已提供ref.updateChildValues(["votes": newValue])已正确更新帖子对象

答案 1 :(得分:1)

在设置新值(如

)后,如何更新单元格的标签
votes.text = "\(newValue)"