点击一个单元格也会影响其他单元格

时间:2016-03-04 07:39:03

标签: ios swift uitableview cocoa-touch reusability

我正在尝试构建一个内置不同按钮的自定义单元格,但是当我点击单元格中的“关注按钮”并为此按钮着色时,似乎其他跟随按钮也会获得颜色...另外如果我向上滚动在我的桌子上查看其他按钮随机获取颜色...我还在学习如何使用自定义单元格...

这里有我的自定义单元格

class customCell: UITableViewCell
{
    @IBOutlet weak var follow: UIButton!
    @IBOutlet var comment: UIButton?
    @IBOutlet var share: UIButton? 
}


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


 let cellPost = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath) as! customCell

    cellPost.tag = Array(postToPrint.keys)[indexPath.row]

    cellPost.follow?.tag = Array(postToPrint.keys)[indexPath.row]
    cellPost.follow?.addTarget(self, action: "follow:", forControlEvents: .TouchUpInside)

    return cellaPost
    }
}

这里有我的功能跟随

 func follow(sender: UIButton)
{
    let postSelected = sender.tag
    // In order to get indexPath from int values
    let indexPath = NSIndexPath(forRow: postSelected, inSection: 1)
    let cell = table.cellForRowAtIndexPath(indexPath) as! customCell
    cell.follow.setTitleColor(UIColor.redColor(), forState: UIControlState)
    idPostClicked = postSelected
    sendHttpRequest(postClicked : idPostClicked)

}

我将字典键作为标记给每个单元格。后来我想把cell.tag作为参数发送到sendHttpRequest方法。如果我将我的按钮功能放在我的customCell中,我想获得有我的followButton的单元格,这样我就可以发送一个带有cell.tag的请求。 但是,当我只点击一个...时,文本会在其他单元格中变色:/

1 个答案:

答案 0 :(得分:0)

嗯,我觉得你是以错误的方式解决这个问题。我宁愿将func follow移动到单元格本身。 tableView没有理由处理这个逻辑,因为它是想要更改它自己可以访问的元素的单元格。此外,如果您将逻辑移动到单元格中,则不需要tags或添加目标等。

class customCell: UITableViewCell
{
    @IBOutlet weak var follow: UIButton!
    @IBOutlet var comment: UIButton?
    @IBOutlet var share: UIButton? 

    // Connect the follow button to this function as an action
    @IBAction followPressed(sender: UIButton) {
        follow.setTitleColor(UIColor.redColor(), forState: UIControlState.Normal)
    }

}

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

    let cellPost = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath) as! customCell
    return cellaPost
}

我相信这应该可以解决问题。

修改

为按钮添加了UIControlState的一些缺失代码。如果这不起作用,您可以上传示例项目吗?很难确定你只想用这段代码做什么。