Я добавил кнопку в ячейку и добавил действие, поэтому, если пользователь коснется его, тогда состояние «Не нравится», и если пользователь снова коснется состояния «Like». Тем не менее, состояние применяется и к другим кнопкам на ячейке. И если я быстро прокручу это, то просто случайно выбирает, какая кнопка ячейки должна иметь состояние. Что вызывает это?Состояние кнопки активируется в неправильных ячейках.
кнопку я вызываю с функцией внутри 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)
}
}
}
И как это я создал TableView с клетками :
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)
}
Что заставляет государство переводить на o Кроме того, кнопки? Я даже добавил теги, чтобы обнаружить выбранную кнопку. Что-то связано с повторным использованием ячеек?
Он добавляет любит Firebase в правый один ..
Чтобы ответить на ваш последний вопрос, в двух словах: повторное использование ячеек. Вы должны показать нам, как вы создаете и возвращаете ячейки. – Cyrille
@Cyrille Я отредактировал. –
Если ваша подобная кнопка является прямым дочерним элементом вашей ячейки, вы должны попытаться получить 'indexPath', попросив табличный вид вместо создания нового на основе тега. 'let cellIndexPath = tableView.indexPathForCell (sender.superview)' – Crazyrems