Состояние кнопки активируется на неправильных ячейках

Я добавил кнопку в ячейки и добавил действие, чтобы, если пользователь коснулся ее, состояние «Не нравится», а если пользователь коснулся снова, состояние «Мне нравится». Однако это состояние относится и к другим кнопкам ячейки. И если я прокручиваю быстро, он просто случайным образом выбирает, какая кнопка ячейки должна иметь состояние. Что вызывает это?

Я вызываю кнопку с функцией внутриcellForRowAt indexPath: IndexPath функционировать так:

cell.likeButton.addTarget(self, action: #selector(like), for: .touchUpInside)

И это функция, которая назначена кнопке:

func like(sender: UIButton){
    let section = 0
    let row = sender.tag
    let indexPath = IndexPath(row: row, section: section)
    let cell: FeedTableViewCell = tableView.dequeueReusableCell(withIdentifier: "feedCell", for: indexPath) as! FeedTableViewCell
    FIRDatabase.database().reference().child("posts").child(postsArray[indexPath.row].key).runTransactionBlock({ (currentData: FIRMutableData) -> FIRTransactionResult in
        if var post = currentData.value as? [String : AnyObject], let uid = FIRAuth.auth()?.currentUser?.uid {
            var stars : Dictionary<String, Bool>
            stars = post["stars"] as? [String : Bool] ?? [:]
            var starCount = post["starCount"] as? Int ?? 0
            if let _ = stars[uid] {
                // Unstar the post and remove self from stars
                starCount -= 1
                stars.removeValue(forKey: uid)
                cell.likeButton.tag = indexPath.row
                cell.likeButton.setTitle("Like", for: .normal)

                cell.likeLabel.text = "\(starCount)"
            } else {
                // Star the post and add self to stars
                starCount += 1
                stars[uid] = true
                cell.likeButton.tag = indexPath.row
                cell.likeButton.setTitle("Dislike", for: .normal)

                cell.likeLabel.text = "\(starCount)"
            }
            post["starCount"] = starCount as AnyObject?
            post["stars"] = stars as AnyObject?

            // Set value and report transaction success
            currentData.value = post

            return FIRTransactionResult.success(withValue: currentData)
        }
        return FIRTransactionResult.success(withValue: currentData)
    }) { (error, committed, snapshot) in
        if let error = error {
            print(error.localizedDescription)
        }
    }
}

И вот так я создал табличное представление с ячейками:

     override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell: FeedTableViewCell = tableView.dequeueReusableCell(withIdentifier: "feedCell", for: indexPath) as! FeedTableViewCell

        cell.likeButton.tag = indexPath.row
        cell.likeButton.addTarget(self, action: #selector(self.tapped), for: .touchUpInside)
    }

Что вызывает переход состояния на другие кнопки? Я даже добавил теги, чтобы он обнаружил выбранную кнопку. Есть ли какое-то отношение к повторному использованию клеток?

Он добавляет лайки в Firebase к нужному.

Ответы на вопрос(3)

Ваш ответ на вопрос