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