代码之家  ›  专栏  ›  技术社区  ›  Frakcool

无法将XIB加载到可重用的TableViewCell中

  •  0
  • Frakcool  · 技术社区  · 4 年前

    我创建了一个XIB文件及其控制器来处理我的可重用自定义单元格:

    enter image description here

    并设置我XIB的类所有者:

    enter image description here

    class WallTableCell: UITableViewCell {
        //Outlets
        
        func setupCell() {
            setupLabels()
        }
        
        func setupLabels() {
            self.title.text = "Sample Title"
            self.postDescriptionLabel.text = "Sample Description"
        }
    }
    

    I、 目前有2个故事板,其中第一个故事板使用 NavigationView ,第二个包含 TabBarView 其中第一个项目具有 TableView .

    在这里,我添加了一个 UITableViewCell 在故事板中

    enter image description here

    单元格的类设置为:

    enter image description here

    控制器的类设置为:

    enter image description here

    我在哪里注册我的Nib并尝试在 cellForRowAt 方法:

    class WallViewController: UIViewController {
        @IBOutlet weak var messagesTable: UITableView!
        
        override func viewDidLoad() {
            loadNibForCells()
        }
        
        func loadNibForCells() {
            let nib = UINib(nibName: "WallTableCell", bundle: nil)
            messagesTable.register(nib, forCellReuseIdentifier: "wallCell")
        }
    }
    
    extension WallViewController: UITableViewDataSource {
        func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
            return 1
        }
        
        func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
            guard let wallCell = messagesTable.dequeueReusableCell(withIdentifier: "wallCell") as? WallTableCell else {
                return UITableViewCell()
            }
            
            wallCell.setupCell()
            
            return wallCell
        }
    }
    

    但是,当我在模拟器中运行应用程序时,我仍然会得到一个空单元格。

    enter image description here

    我该怎么做才能在tableViewCell中显示我的自定义XIB视图?

    在遵循@Sh_Khan的回答并添加:

    messagesTable.delegate = self
    messagesTable.dataSource = self
    

    应用程序因错误而崩溃:

    Thread 1: Exception: "[<NSObject 0x600001628e70> setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key postDescriptionLabel"
    

    我认为这与以下事实有关 TableViewCell 故事板内部是空的,而不是包含 WallTableCell

    1 回复  |  直到 4 年前
        1
  •  1
  •   Shehata Gamal    4 年前

    确保设置数据源,并在需要时委派

    messagesTable.register(nib, forCellReuseIdentifier: "wallCell")
    messagesTable.delegate = self
    messagesTable.dataSource = self
    
        2
  •  1
  •   Lynx    4 年前

    出现错误: Thread 1: Exception: "[<NSObject 0x600001628e70> setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key postDescriptionLabel" ,所以也许你需要解除绑定 postDescriptionLabel 并将其从xib文件重新绑定到swift文件。

        3
  •  0
  •   Frakcool    4 年前

    当我错过添加我的 messagesTable 的数据源,这是Sh_Khan推荐的,后来我错误的解决方案是,我的参考出口指向的是“文件的所有者”,而不是我的文件的出口。

    因此,在选择自定义时 TableViewCell (不是原型)应该是:

    enter image description here

    出于某种原因,它不是右侧的“标题标签”,而是“文件的所有者”

    原型单元不应包含任何附加到它的类。