управлять содержимым ячейки UITableView из другой ячейки с помощью 2 классов / делегатов Swift - PullRequest
0 голосов
/ 17 октября 2018

У меня есть табличное представление, которое загружается с тремя настраиваемыми ячейками, ячейкой заголовка поста, ячейкой пост-изображения и ячейкой пост-действия. см. Здесь ячейки табличного представления

В настоящее время у меня есть кнопка воспроизведения для моих видео в ячейке postImage, и она работает нормально, однако я хотел бы перенести функциональность кнопки воспроизведения в ячейку postAction.где пользователь голосует за да или нет, поэтому, когда пользователь голосует, он также вызывает функцию воспроизведения видео (handlePlay).

Новое: у меня PostActionCell в качестве пользовательского класса, а мой домашний viewcontroller (HomeVC) в качестве делегата для обработки функций голосования.

У меня также есть PostImageCell в качестве пользовательского класса, и я пытался сделать HomeVC делегатом, когда я это делаю, я могу получить доступ к нужным мне данным табличного представления, но затем я застреваю, пытаясь получить доступ к PostImageCell и PostActionCellв том же месте.

Я также пытался сделать PostActionCell делегатом PostImageCell, и это позволило мне получить доступ к нужным мне данным класса PostImageCell, но не к данным табличного представления ...

Итак, как / где я долженпытаться получить доступ к обоим пользовательским классам?

Вот мой протокол для PostImageCell:

import UIKit
import AVFoundation

protocol PostImageCellDelegate: class {
   func playVideo(_ cell: PostImageCell)
}

class PostImageCell: UITableViewCell {

   weak var delegate: PostImageCellDelegate?

   @IBOutlet weak var postImage: UIImageView!
   @IBOutlet weak var playButton: UIButton!

   override func awakeFromNib() {
       super.awakeFromNib()
   }

   func playVideoCalled() {
       delegate?.playVideo(self)
   }

   func prepareForReuse(layer: AVPlayerLayer) {
      super.prepareForReuse()
      layer.removeFromSuperlayer()
   }
}

Вот моя попытка получить доступ к моим PostActionCell и PostImageCell на моем HomeVC, но я не могу 'Кажется, я получаю доступ к PostImageCell, когда мне это нужно ...:

//MARK: - PostActionCell and PostImageCell DELEGATE

extension HomeVC: PostActionCellDelegate, PostImageCellDelegate {

   func playVideo(_ cell: PostImageCell) {

      guard let indexPath = tableView.indexPath(for: cell) else { return }

      handlePlay2(cell, indexPath: indexPath)

   }

   func didTapVoteYesButton(_ voteButton: UIButton, on cell: PostActionCell ) {

      //playVideo( NEED PostImageCell HERE )

      guard let indexPath = tableView.indexPath(for: cell) else { return }

      voteButton.isUserInteractionEnabled = false

      let post = posts[indexPath.section]

      VoteFirebase.setDidVoteYes(!post.didVote, for: post) { (success) in
         defer {
            voteButton.isUserInteractionEnabled = true
         }

         guard success else { return }

         post.yesCount += !post.didVote ? 1 : -1
         post.voteCount += !post.didVote ? 1 : -1
         post.didVote = !post.didVote

         guard let cell = self.tableView.cellForRow(at: indexPath) as? PostActionCell
            else { return }

          DispatchQueue.main.async {
             self.configureCell(cell, with: post)
          }
       }
    }
}

1 Ответ

0 голосов
/ 17 октября 2018

Вы можете получить доступ к представлению таблицы с этим расширением:

extension UITableViewCell {
    var tableView: UITableView? {
        return next as? UITableView
    }
}

и получить доступ к indexPath ячейки с этим расширением:

extension UITableViewCell {
    var indexPath: IndexPath? {
        return tableView?.indexPath(for: self)
    }
}

Таким образом, вы можете рассчитать индекс ячейки игрока иполучить к нему доступ tableView.cellForRow(at: indexPath).

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