由于表格视图中可重复使用的单元格,当它滚动到视图之外时会丢失 Youtube 播放器
Posted
技术标签:
【中文标题】由于表格视图中可重复使用的单元格,当它滚动到视图之外时会丢失 Youtube 播放器【英文标题】:Lose Youtube player when it scrolls out of view because of reusable cells in table view 【发布时间】:2018-04-27 23:52:00 【问题描述】:我正在构建一个类似新闻提要的 Instagram。每个帖子要么是 Spotify 流媒体歌曲,要么是在其自己的 YTplayer 视图中播放的 Youtube 视频。如果我播放视频单元格然后滚动浏览提要,即使您看不到视频,视频也会继续播放。此时,如果我滚动到 Spotify 帖子并点击播放,我希望视频停止播放。我无法做到这一点。我试图跟踪“最后播放”的视频单元并停止 YTplayer 实例,但该单元在那时被重用并且不存在。所以我不能那样做。有人对我如何做到这一点有任何想法吗?
我的自定义表格视图单元格类具有 YTplayer 视图,我只加载了一些带有 youtube 视频 ID 的单元格,当加载表格视图时这些单元格成为 Youtube 视频单元格。
【问题讨论】:
我也面临同样的问题,请您描述一下您的解决方案 嗨@AbecedarioPoint,我刚刚标记了我的答案并包含了更多详细信息,如果这对你有用,请告诉我。 【参考方案1】:我认为你需要实现
func tableView(_ tableView: UITableView,
didEndDisplaying cell: UITableViewCell,
forRowAt indexPath: IndexPath)
// access the playing video of the cell and stop it
【讨论】:
这将在单元格滚动出视图时停止播放视频,对吗?这就是我解释文档的意思。我不希望这种情况发生。我希望视频即使不在视野范围内也能继续播放,并且只有在播放另一个帖子时才会停止。【参考方案2】:我解决了。在我的 dequeueReusableCell 之后,我检查单元格是否包含视频帖子。我使用我在帖子中设置的字符串标志来执行此操作。如果是这样,我将我的 tableview 控制器声明为其播放委托。从那里开始,如果我播放那个单元格并滚动到一个 Spotify 单元格并播放那个单元格,我会使用 player.stopVideo() 来停止 Youtube 播放器。
【讨论】:
当用户点击一个 Youtube 单元格时,我基本上将我的 TableViewController 声明为其播放委托。声明一个 YTPlayerView 变量。将控制器声明为 viewDidLoad 中的委托。现在你有了一个 youtube playerview,你可以在主控制器的任何时候停止/开始。当用户点击 youtube 单元格时,我只需将控制器 YTPlayerview = Cell 的 YTPlayerView。var youtubeplayer: YTPlayerView?
。在 viewDidLoad:self.youtubeplayer?.delegate = self
当用户点击单元格时:youtubeplayer = tappedCell.playerView
以上是关于由于表格视图中可重复使用的单元格,当它滚动到视图之外时会丢失 Youtube 播放器的主要内容,如果未能解决你的问题,请参考以下文章
当单元格滚动出视图时,TableViewCell 的 textLabel 值返回 1