更改UITableViewCell中按钮的值正在更改其他按钮值

时间:2015-05-28 20:11:28

标签: ios uitableview swift

如果太长,我的问题是:当我点击一个单元格的按钮播放并想要更改按下的播放按钮的图像时,其他一些单元格的播放按钮也会改变。

我正在创建一个应用程序,您可以在其中获取音乐预览并播放它们。 为了显示这一点,我使用UITableView和自定义UITableViewCell,其中包含播放按钮和其他一些内容。

这就是它的样子。

enter image description here

所以,当我点击一个单元格播放按钮时,会播放正确的曲目,但问题出现了:我尝试更改按钮的backgroundImage,但其他按钮图像也改变了......如果我滚动我的按钮甚至得到在我做出改变之前回到它正在使用的图像......

The cell correctly shows the new image 单元格正确显示新图像 But some other do it too... 但其他一些人也这样做了...... enter image description here 如果我向上滚动,我的新图像会被较旧的图像重新映射......

这是我的功能代码:

func getPreview(sender : AnyObject){

    var positionButton = sender.convertPoint(CGPointZero, toView: self.feedTable)
    var indexPath = self.feedTable.indexPathForRowAtPoint(positionButton)
    var rowIndex = indexPath!.row

    var cell = feedTable.cellForRowAtIndexPath(indexPath!)
    var bouton: UIButton = cell?.valueForKey("postPlay") as! UIButton



    if sender.title == "Mettre l'extrait en pause" {
        mediaPlayer.pause()
        sender.setTitle("Jour l'extrait", forState: UIControlState.Normal)
        var playImage = UIImage(named: "playIcon")
        sender.setImage(playImage, forState: UIControlState.Normal)
    }

    if rowIndex == bouton.tag{
        var songLink = post[rowIndex].valueForKey("previewLink") as! String
        let url = NSURL(string: songLink)

        mediaPlayer.contentURL = url
        mediaPlayer.play()

        bouton.setTitle("Mettre l'extrait en pause", forState: UIControlState.Normal)
        var pauseImage = UIImage(named: "pauseIcon")
        bouton.setImage(pauseImage, forState: UIControlState.Normal)
    }


}
你可以帮我找出什么问题吗?谢谢!

1 个答案:

答案 0 :(得分:0)

UITableViewCells可以重复使用,而不是存储在屏幕外,直到您需要再次使用相同的索引路径。因此,每次显示一个单元格时,都会调用-tableView:cellForRowAtIndexPath:,并且您负责完全设置单元格。每次。您不能假设您之前为该索引路径上的单元格设置的状态仍然完好无损。