Ios Swift:自定义单元格不是';在视图中未被检测到

Ios Swift:自定义单元格不是';在视图中未被检测到,ios,swift,uitableview,video,avplayer,Ios,Swift,Uitableview,Video,Avplayer,我试图创建的是一个类似藤蔓的视频提要,当包含视频的单元格在视图中时,它可以播放/暂停视频。为了包含视频,我使用了一个自定义单元名TVC,它附带了一个用于自定义单元设计的xib。目前我让tableview加载单元格和视频,但是当我尝试使用didendisplaying和willDisplay来确定单元格是否在视图中以相应地播放/暂停视频时,它似乎无法检测单元格是否在视图中。这是我的密码 override func tableView(_ tableView: UITableView, cellFo

我试图创建的是一个类似藤蔓的视频提要,当包含视频的单元格在视图中时,它可以播放/暂停视频。为了包含视频,我使用了一个自定义单元名
TVC
,它附带了一个用于自定义单元设计的xib。目前我让tableview加载单元格和视频,但是当我尝试使用
didendisplaying
willDisplay
来确定单元格是否在视图中以相应地播放/暂停视频时,它似乎无法检测单元格是否在视图中。这是我的密码

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> TVC {
   // let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath)
    let cell = Bundle.main.loadNibNamed("TVC", owner: self, options: nil)?.first as! TVC
    let vide = sweets[indexPath.row]



    let currentURL: URL = URL(string: vide.content)!
    print("final", currentURL)

    print(vide.content)
    print(vide.addedByUser)
    cell.label?.text = vide.addedByUser
   // performSegue(withIdentifier: "cell", sender: self)
    cell.moviePlayer(url: currentURL)


    return cell
}

func tableView(_ tableView: UITableView, didEndDisplaying cell: TVC, forRowAt indexPath: IndexPath) {
    print("out of display")
    cell.player.pause()


}

 func tableView(_ tableView: UITableView, willDisplay cell: TVC, forRowAt indexPath: IndexPath) {
    print("playing")
    cell.player.play()

}
还有我的自定义单元类

class TVC: UITableViewCell {

@IBOutlet weak var videoContainer: UIView!
@IBOutlet weak var label: UILabel!
let avPlayer = AVPlayer()
var avPlayerLayer: AVPlayerLayer!
var urlString: String!
var videoURL: URL!
var jacksURL: URL!
var url: String!
var player: AVPlayer!

@IBOutlet weak var VideoView: UIView!
@IBOutlet weak var card: UIView!

override func awakeFromNib() {
    super.awakeFromNib()





    let radiusC: CGFloat = card.frame.width / 2.0
    let shadowPathC = UIBezierPath(rect: CGRect(x: 0, y: 2, width: 2 * radiusC, height: card.frame.height))

    let radius: CGFloat = videoContainer.frame.width / 2.0
    let shadowPath = UIBezierPath(rect: CGRect(x: 0, y: 2, width: 2 * radius, height: videoContainer.frame.height))
    videoContainer.layer.cornerRadius = 2
    videoContainer.layer.shadowColor = UIColor.black.cgColor
    videoContainer.layer.shadowOffset = CGSize(width: 0.5, height: 0.8)
    videoContainer.layer.shadowOpacity = 0.1
    videoContainer.layer.shadowRadius = 4.0
    videoContainer.layer.masksToBounds =  false
    videoContainer.layer.shadowPath = shadowPath.cgPath
    self.videoContainer.layer.cornerRadius = 8
    VideoView.layer.masksToBounds =  true
    self.VideoView.layer.cornerRadius = 8


    card.layer.shadowColor = UIColor.black.cgColor
    card.layer.shadowOffset = CGSize(width: 0.5, height: 0.4)
    card.layer.shadowOpacity = 0.2
    card.layer.shadowRadius = 4.0
    card.layer.masksToBounds =  false
    card.layer.shadowPath = shadowPathC.cgPath
    card.layer.cornerRadius = 8




    let currentURL: URL = URL(string: "https://firebasestorage.googleapis.com/v0/b/vaudiodatabasetest.appspot.com/o/myMovies%2F2017-02-20-01-01-47.mov?alt=media&token=a41389a1-2f1f-424b-b999-e7a0ca774e0c")!


   videoURL = currentURL as URL!

    moviePlayer(url: videoURL)



}





 func moviePlayer(url: URL) {
    let player = AVPlayer(url: url)


    let playerLayer = AVPlayerLayer(player: player)
    playerLayer.frame = self.VideoView.bounds
    self.VideoView?.layer.addSublayer(playerLayer)
    self.VideoView?.layer.cornerRadius = 8
    self.VideoView?.layer.masksToBounds = true
    player.externalPlaybackVideoGravity = AVLayerVideoGravityResizeAspectFill
    playerLayer.videoGravity = AVLayerVideoGravityResizeAspectFill

    NotificationCenter.default.addObserver(forName: NSNotification.Name.AVPlayerItemDidPlayToEndTime, object: player.currentItem, queue: nil)
    {
        notification in
        let t1 = CMTimeMake(5, 100);
        player.seek(to: t1)
        player.play()
    }


}



}

似乎没有检测到单元格是否在视图中的意思是什么?正在调用这些方法吗?另外,为什么不使用
dequeueReusableCell
?如果不将单元格出列,我不确定是否会调用
willDisplayCell
didendisplayingcell
方法。请澄清正在发生的确切问题。什么是dequeReusableCell?我该如何使用它?@robotcat我刚意识到你的意思,并且我被教导在尝试加载自定义单元格时不要使用deque。你应该始终使用
dequeueReusableCell(带标识符:,for:)
方法-你得到了一些不好的建议。您的自定义单元格可能需要一些重新工作,这样您就不会添加多个观察者(每次调用
moviePlayer
方法时都会添加一个观察者)。您还想删除单元格的
deinit
@robotcat中的观察者。您可以参考我的代码对此进行扩展吗?我刚开始学斯威夫特,所以我完全是个初学者。