TableViewCell Nib错误:已加载笔尖,但未设置视图出口

时间:2019-01-15 06:36:16

标签: swift uitableview xib

试图创建一个tableView单元格xib,但由于“加载笔尖但未设置视图出口”的错误而卡住了

我已经阅读了许多帖子,并且大多数人说将“视图”从“文件的所有者”拖动到IB视图。

但是,如果您从图像中注意到,则没有“视图”选项。我已经重新创建了具有相同结果的xib。也许是Swift 4.2中的新功能。

任何帮助都是巨大的。

class VersionTVCell: UITableViewCell {

    @IBOutlet weak var  versionNumber: UILabel!
    @IBOutlet weak var  versionDetail: UILabel!
    @IBOutlet weak var  versionDate: UILabel!
}


class VersionTVC: UITableViewController {

    fileprivate var versions: Array<VersionModel> = [VersionModel]()

    override func viewDidLoad() {
        super.viewDidLoad()

        self.versions = AppDelegate.getRLDatabase().getVersion()

        tableView.register(UINib(nibName: "VersionTVCell", bundle: nil), forCellReuseIdentifier: "VersionCell")

        tableView.rowHeight = UITableView.automaticDimension
        tableView.estimatedRowHeight = 70
    }

    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
    {
        let cell = tableView.dequeueReusableCell(withIdentifier: "VersionCell", for: indexPath) as! VersionTVCell

        cell.versionNumber.text              =   self.versions[(indexPath as NSIndexPath).row].versionNumber
        cell.versionDetail.text              =   self.versions[(indexPath as NSIndexPath).row].versionDetail
        cell.versionDate.text                =   self.versions[(indexPath as NSIndexPath).row].versionDate

        return cell
    }

    override func numberOfSections(in tableView: UITableView) -> Int {

        return 1
    }

    override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {

        return self.versions.count
    }
}

下面是两个屏幕快照,一个是来自单元格的,另一个是来自文件所有者的。

First Screen shot

Second Screen shot

我也尝试了从文件所有者链接到标签。没有帮助。

编辑: 添加我的addSubView函数:

@objc func loadVersions() {

    let newSubView = AddSubView.toVersions.getView()
    let blackBackground = UIView(frame: CGRect(x: 0, y: 65, width: self.view.frame.width, height: self.view.frame.height))
    blackBackground.backgroundColor = UIColor.black.withAlphaComponent( 0.7)

    UIView.transition(with: self.view, duration: 0.3, options: UIView.AnimationOptions.transitionCrossDissolve,
                      animations: {self.view.addSubview(self.backgroundView)}, completion: nil)

    newSubView.frame = CGRect(x: 0, y: (self.view.frame.height) * 0.1, width: (self.view.frame.width) * 0.9, height: (self.view.frame.height) * 0.8)
    newSubView.layer.borderWidth = 1
    newSubView.layer.borderColor = UIColor.defaultDialogBorderColor().cgColor
    newSubView.layer.cornerRadius = 8.0
    newSubView.clipsToBounds = true
    self.view.addSubview(newSubView)
}

Screenshot of VersionTVC

2 个答案:

答案 0 :(得分:3)

我已经尝试过您的代码,并且一切正常。

确保没有将VersionTVCell类的UITableViewCell分配给文件所有者,并且没有将@IBOutlet连接到xib

enter image description here

文件所有者连接检查器应与下图相似

enter image description here

另外,尝试删除并重新连接@IBOutlet

enter image description here

经过测试的示例

enter image description here

答案 1 :(得分:1)

据我了解,所有代码均正确无误,因此请执行一些步骤。

1)确保为单元格的类名分配正确的名称。

2)使用此命令 Shift + 选项 + 命令 + k 清除代码。

3)如果上述步骤没有成功。从tableView UI中删除委托和数据源插座,并在此行之后手动编写。

tableView.register(UINib(nibName: "VersionTVCell", bundle: nil), forCellReuseIdentifier: "VersionCell")
tableView.delegate = self
tableView.dataSource = self
tableView.reloadData()