Размах к лайку на UITableViewCell не работает должным образом - Swift - PullRequest
0 голосов
/ 27 ноября 2018

Я использую UISwipeGestureRecognizer , чтобы обнаружить пролистывание ячейки в UITableViewCell , аналогично ЭТОЙ ССЫЛКЕ , которая позволит пользователю ' Как 'фотография.

Проблема в том, что я не совсем понимаю, как изменить значение Like для этого конкретного поста - и у него нет indexPath какдругие «встроенные» методы.Я также не понимаю, как он знает, как использовать ячейку, которая отображается преимущественно на экране, поскольку может быть несколько ячеек, которые еще не были «сняты с производства»?:

@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 влево для удаления методов - для различных целей UX в данном конкретном случае.

Ответы [ 3 ]

0 голосов
/ 27 ноября 2018

Вы можете попробовать

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

Не рекомендуется добавлять жесты внутри cellForRowAt, вы можете добавить их внутри init для программных ячеек или awakeFromNib для ячеек xib / prototype


@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
    }
}
0 голосов
/ 28 ноября 2018

Вы можете установить тег изображения ячейки, который вы добавляете 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)

     }

}

Надеюсь, что это помогло!

0 голосов
/ 27 ноября 2018

Вы можете передать ваш indexpath в качестве параметра в вашем селекторе.а затем добавьте подобное в yourArray [indexpath.row]

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...