我有一个TableView单元格,其中一些单元格上有视频,当我滚动时,设置为自动播放,单元格有一个正确播放的视频,我知道当前索引行正常工作。我想知道的是如何从UiTableViewCell中获取当前可见行?这样我就可以在用户滚动时停止播放视频。这是我的代码
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "MyCellTVC", for: indexPath) as! MyCellTVC
let movieURL = URL(string: streamsModel.stream_image_string[indexPath.row])
cell.videoCapHeight.constant = CGFloat(Float(cell.pic_height!))
cell.playerView = AVPlayer(url: movieURL!)
streamsModel.MyAVPlayer.player = cell.playerView
streamsModel.MyAVPlayer.view.frame = cell.videoView.bounds
cell.videoView.addSubview(streamsModel.MyAVPlayer.view)
controller.addChildViewController(streamsModel.MyAVPlayer)
streamsModel.MyAVPlayer.player?.play()
// I would like to get the current visible view row
// here so I can do some logic
return cell
}
我想得到行号,因为我想在那里做一些逻辑,因为我可以访问TableView内的UILabel(cell dequeueReusableCell)。
答案 0 :(得分:0)
嗯,很可能表视图会在一次显示多个单元格。 要知道何时显示和删除单元格,您可以实现2个委托方法:
optional func tableView(_ tableView: UITableView,
willDisplay cell: UITableViewCell,
forRowAt indexPath: IndexPath)
optional func tableView(_ tableView: UITableView,
didEndDisplaying cell: UITableViewCell,
forRowAt indexPath: IndexPath)
答案 1 :(得分:0)
您可以使用 tableView indexPathForRow 方法。在scrollViewDidScroll中实现,通过CGPoint获取indexPath。根据您的单元格大小更改 CGPoint。
extension ViewController : UIScrollViewDelegate
{
func scrollViewDidScroll(_ scrollView: UIScrollView)
{
if let indexPath = tableViewForPoint.indexPathForRow(at: CGPoint(x: scrollView.contentOffset.x, y: scrollView.contentOffset.y))
{
print("Current cell \(indexPath.row)")
}
}
}
答案 2 :(得分:0)
获取表格视图的可见单元格,可以使用以下代码。
guard let visibleCell = self.tableView.visibleCells.first else {
return
}
let view = visibleCell.contentView
visibleCell.contentView 将给出可见单元格的视图。