我有一个带有自定义单元格的TableViewController。当我点击其中一个单元格内的like按钮时,它会导致至少一个其他单元格点击相似的按钮。
我正在使用Parse,并且它不会影响第二个实际的类似数量,它被重点轻击,但它禁用了类似按钮并将其变为红色。
我已阅读有关细胞重用和类似主题的内容但完全丢失了。我是swift的新手,如果有人可以帮我解决这个问题,我找不到关于Swift和Parse的解决方案。
TableViewController
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
var cell:ChinTwoTableViewCell = tableView.dequeueReusableCellWithIdentifier("cell", forIndexPath: indexPath) as! ChinTwoTableViewCell
cell.selectionStyle = .None
// Configure the cell...
let chinTwo:PFObject = self.timelineData.objectAtIndex(indexPath.row) as! PFObject
var myVar:Int = chinTwo.objectForKey("likeCount") as! Int
cell.countLabel.text = String(myVar)
cell.nameLabel.text = chinTwo.objectForKey("name") as? String
cell.bodyText.text = chinTwo.objectForKey("body") as! String
cell.bodyText.font = UIFont(name: "HelveticaNeue-UltraLight", size: 18)
cell.bodyText.textAlignment = .Center
cell.likeButton.tag = indexPath.row;
cell.likeButton.addTarget(self, action: "likeButtonTapped:", forControlEvents: .TouchUpInside)
return cell
}
@IBAction func likeButtonTapped(sender: AnyObject) {
let chinTwo = self.timelineData[sender.tag] as! PFObject
chinTwo["likeCount"] = (chinTwo["likeCount"] as! Int) + 1
sender.setTitleColor(UIColor.redColor(), forState: UIControlState.Normal)
chinTwo.saveInBackgroundWithBlock {
(success: Bool, error: NSError?) -> Void in
if (success) {
println("Worked")
} else {
println("Didn't Work")
}
}
self.tableView.reloadData()
}
TableViewCell
@IBAction func likeTapped(sender: AnyObject) {
likeButton.enabled = false
}
报告按钮出现同样的问题。
答案 0 :(得分:1)
由于可重复使用的单元格,将在多个单元格上使用相同的likeButton
,具体取决于是否显示。如果您更改一个实例的颜色,它将在再次重复使用另一个单元格时保留该颜色。您应该在cellForRowAtIndexPath
方法中确定按钮是否应该为红色,而不是在click方法中设置颜色。如下所示:
var likedRows: Set<Int> = Set()
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
...
self.markButtonIfLiked(cell.button, atRow: indexPath.row)
...
}
@IBAction func likeButtonTapped(button: UIButton) {
...
self.likedRows.insert(button.tag)
self.markButtonIfLiked(button, atRow: button.tag)
...
}
func markButtonIfLiked(button: UIButton, atRow row: Int) {
if (self.likedRows.contains(row)) {
button.setTitleColor(.redColor(), forState: .Normal)
}
}
您不应该tableView.reloadData()
来电。