在 UITableViewCell 上滑动点赞未按预期工作 - Swift

Swipe to Like on UITableViewCell not working as expected - Swift

我正在使用 UISwipeGestureRecognizer 检测 UITableViewCell 中单元格的滑动,类似于 将允许用户“喜欢”一张照片。

问题是我不太明白如何更改特定 post 的 Like 值 - 而且它没有像其他 'built-in' 方法。我也不明白它是如何知道使用主要显示在屏幕上的单元格的,因为可能有不止一个单元格尚未 "dequeued"?:

@objc func mySwipeAction (swipe: UISwipeGestureRecognizer) {

    switch swipe.direction.rawValue {
    case 1:
        print ("the PostID you selected to LIKE is ...")

    case 2:
          print ("the PostID you selected to Undo your LIKE is ...")

    default:
        break
    }
}

我的 tableView 看起来像这样:

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

    let cell = tableView.dequeueReusableCell(withIdentifier: "postTopContributions", for: indexPath) as! PostTopContributions
    let postImage = postImageArray [indexPath.row]
    let imageURL = postImage.postImageURL

    cell.delegate = self

    cell.postSingleImage.loadImageUsingCacheWithUrlString(imageURL)
    cell.postSingleLikes.text = "\(postImageArray [indexPath.row].contributionPhotoLikes)"
    cell.postSingleImage.isUserInteractionEnabled = true


    let leftSwipe = UISwipeGestureRecognizer(target: self, action: #selector(self.mySwipeAction(swipe:)))
    let rightSwipe = UISwipeGestureRecognizer(target: self, action: #selector(self.mySwipeAction(swipe:)))

    leftSwipe.direction = UISwipeGestureRecognizerDirection.left
    rightSwipe.direction = UISwipeGestureRecognizerDirection.right

    cell.postSingleImage.addGestureRecognizer(leftSwipe)
    cell.postSingleImage.addGestureRecognizer(rightSwipe)

    let selectedCell = self.postImageArray [indexPath.row]

    return cell
}

我不想使用本机 TableView 行向左滑动来删除方法 - 在这种特定情况下出于各种用户体验目的。

您可以将索引路径作为选择器中的参数传递。然后在 yourArray[indexpath.row]

添加类似内容

你可以试试

cell.postSingleImage.addGestureRecognizer(leftSwipe)
cell.postSingleImage.addGestureRecognizer(rightSwipe)
cell.postSingleImage.tag = indexPath.row

Don't recommend adding gestures inside cellForRowAt , you may add them inside init for programmatic cells or awakeFromNib for xib / prototype cells


@objc func mySwipeAction (swipe: UISwipeGestureRecognizer) {

    let index = swipe.view.tag
    let selectedCell = self.postImageArray[index]
    switch swipe.direction.rawValue {
    case 1:
        print ("the PostID you selected to LIKE is ...")
       // edit dataSource array
    case 2:
          print ("the PostID you selected to Undo your LIKE is ...")
       // edit dataSource array

    default:
        break

   // reload table IndexPath
    }
}

您可以将要添加 GestureRecognizer 的单元格图像的标签设置到单元格本身的 indexPath 行:

cell.postSingleImage.tag = indexPath.row
cell.postSingleImage.addGestureRecognizer(leftSwipe)
cell.postSingleImage.addGestureRecognizer(rightSwipe)

然后,您可以通过获取触发滑动手势的视图标签来确定哪个单元格触发了 GestureRecognizer:

@objc func mySwipeAction (gesture: UISwipeGestureRecognizer) {
     let indexPathRow = gesture.view.tag
     let indexPath = IndexPath(row: indexPathRow, section: 0) // assuming this is a 1 column table not a collection view
     if let cell = tableView.cellForRow(at: indexPath) as? PostTopContributions {
          // ... and then do what you would like with the PostTopContributions cell object
          print ("the PostID you selected to LIKE is ... " + cell.id)

     }

}

希望对您有所帮助!