从.xib文件自定义UITableViewCell

时间:2018-02-17 20:30:22

标签: ios swift uitableview

我正在尝试使用.xib文件中的自定义UITableViewCell

在我有UITableView的ViewController中,我已经做了以下事情:

Ctrl +在Table Builder中将tableViewDataSource和tableViewDelegate拖到此View Controller。

这段代码:

    import UIKit

    class ResultsFoundViewController: UIViewController, UITableViewDataSource, UITableViewDelegate {

        @IBOutlet weak var tableView: UITableView!

        override func viewDidLoad() {
            super.viewDidLoad()

            self.tableView.dataSource = self;
            self.tableView.delegate = self;

       //Register my Custom Cell
            let customCellName = String(describing: ResultsFoundTableViewCell.self);
            let customCellNib = UINib.init(nibName: customCellName, bundle: nil);
            self.tableView.register(customCellNib, forCellReuseIdentifier: customCellName);
        }

        public func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
            return 5;
        }

        // MARK: UITableViewDataSource Functions

        func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
            let cell = tableView.dequeueReusableCell(withIdentifier: "ResultsFoundTableViewCell", for: indexPath) as! ResultsFoundTableViewCell;
            cell.lbStoreName.text = "Name";

    return cell;
            } 
}

在CustomCell中,我只有一个标签,使其更简单:

import UIKit

class ResultsFoundTableViewCell: UITableViewCell {

    @IBOutlet weak var lbStoreName: UILabel! 
}

我得到的错误是:

  

由于未捕获的异常而终止应用   'NSInternalInconsistencyException',原因:'无效的nib已注册   对于标识符(ResultsFoundTableViewCell) - nib必须完全包含   一个顶级对象,必须是UITableViewCell实例'

你知道为什么会这样吗?

1 个答案:

答案 0 :(得分:0)

出现此问题的原因是您必须将所有UI组件放在 cell-> contentView 中,如果任何元素不在其中,则nib注册将失败

还可以在不描述

的情况下进行nib声明
    let customCellNib = UINib.init(nibName: "nibClassName", bundle: nil);
    self.tableView.register(customCellNib, forCellReuseIdentifier: customCellName);

此处为String(describing

  let customCellName = String(describing: ResultsFoundTableViewCell.self);

为此字符串内容添加可选项,如此可选(" nibClassName")