IOS swift可以从TableViewCell内部获取当前可见视图

时间:2017-11-09 04:59:35

标签: swift uitableview nsindexpath

我有一个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)。

3 个答案:

答案 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 将给出可见单元格的视图。