提问者:小点点

以编程方式添加TableView时未调用CellForRowAt


我正在创建一个UI(以编程方式),它将显示两个主要部分

>

  • 第一部分将显示一个视频播放器

    第二部分将展示一个带有更多视频的UITableView

    我已经成功地完成了第一部分,它正在工作,它占据了屏幕顶部的一小部分

    使用相同的逻辑,我试图在主容器视图中添加一个UITableView,但我只能看到一个空的tableView

    我还尝试在调用cellForRowAt时记录消息,但没有打印任何内容,我得出结论认为没有调用cellForRowAt

    下面是执行所有这些操作的类的代码:

    import UIKit
    import AVFoundation
    
    
    class VideoLauncher: NSObject , UITableViewDataSource, UITableViewDelegate{
    
    
    let data : [String] =  ["String 1", "String 2", "String 3", "String 4", "String 4"]
    
    // TableView initialization
    let tableView : UITableView = {
        let t  = UITableView()
        t.translatesAutoresizingMaskIntoConstraints = false
        t.register(UITableViewCell.self, forCellReuseIdentifier: "customCell")
        t.rowHeight = 80
    
        return t
    }()
    
    
    func showVideoPlayer(){
        
        if let keyWindow = UIApplication.shared.keyWindow {
          
            // View Container that will contain the player and the tableview
            let mainContainer = UIView(frame: keyWindow.frame)
            mainContainer.backgroundColor = .white
            mainContainer.frame = CGRect(x: keyWindow.frame.width - 30, y: keyWindow.frame.height - 30, width: 10, height: 10)
          
            // Creating and adding the first part : PlayerView
            let height = keyWindow.frame.width * 9 / 16
            let videoPlayerFrame = CGRect(x: 0, y: 0, width: keyWindow.frame.width, height: height)
            let videoPlayerView = VideoPlayerView(frame: videoPlayerFrame)
            mainContainer.addSubview(videoPlayerView)
            
            
            // Creating and adding the second Part: TableView
            // I'm adding the tableView to another UIView : tableViewContainer
           
            let tableViewContainer = UIView()
               tableViewContainer.frame = CGRect(x: 0, y: videoPlayerView.frame.maxY, width: keyWindow.frame.width, height: keyWindow.frame.height)
         
            mainContainer.addSubview(tableViewContainer)
            
            tableView.delegate = self
            tableView.dataSource = self
            tableView.frame  = CGRect(x: 0, y: 0, width: tableViewContainer.frame.width, height: tableViewContainer.frame.height)
            
            tableViewContainer.addSubview(tableView)
    
            keyWindow.addSubview(mainContainer)
              
            UIView.animate(withDuration: 0.5, delay: 0, usingSpringWithDamping: 1, initialSpringVelocity: 1, options: .curveEaseOut) {
                mainContainer.frame = CGRect(x: keyWindow.frame.minX, y: keyWindow.frame.minY + 35, width: keyWindow.frame.width, height: keyWindow.frame.height)
            } completion: { (Bool) in
              
            }
        
        }
    }
    
    // MARK: - TABLEVIEW DATA SOURCE
    
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        print("NumberOfRows In Section")
        return data.count
    }
    
    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        print("Cell For row At")
        let cell = tableView.dequeueReusableCell(withIdentifier: "customCell", for: indexPath)
        let s = data[indexPath.row]
        cell.textLabel?.text = s
        return cell
    }
    }
    

    我得到的输出是:

    任何有关这方面的帮助,将非常感谢...


  • 共1个答案

    匿名用户

    你试过了吗?

    self.tableView.reloadData()