【问题标题】:TableViewCell Nib error: loaded the nib but the view outlet was not setTableViewCell 笔尖错误:已加载笔尖但未设置视图出口
【发布时间】:2019-06-09 04:00:03
【问题描述】:

尝试创建 tableView 单元格 xib,但遇到错误“已加载 nib 但未设置视图出口”

我读过很多帖子,大多数人说将“视图”从文件所有者拖到 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
    }
}

以下是两个屏幕截图,第一个来自单元格,第二个来自文件所有者。

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

编辑: 添加我的 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)
}

【问题讨论】:

  • 应用在哪一行崩溃了?
  • 从 xib 加载的 VersionTVC 或者您使用的是故事板?
  • @Vishal16,我正在通过 subView 加载。我在下面的示例中跟随您并消除了视图加载错误。它现在加载,但没有任何数据。我在我的 VerisonTVC 上设置了一个断点,但现在看到它没有被调用。
  • 你在使用 Storyboard 吗?
  • @Vishal16,我也尝试将文件的所有者设置为 VersionTVC,但这没有帮助。

标签: swift uitableview xib


【解决方案1】:

我已经尝试过您的代码,它运行良好。

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

文件所有者连接检查器应如下图所示

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

测试示例

【讨论】:

    【解决方案2】:

    据我了解,代码中的所有内容都是正确的,因此请应用一些步骤。

    1) 将 Sure Cell 的类名指定为正确的名称。

    2) 使用此命令清理代码 Shift + option + command + k

    3) 如果您在上述步骤中没有成功。从 tableView UI 中删除 delegate 和 dataSource Outlets 并在此行之后手动编写。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-11-22
      • 2011-07-20
      • 2012-03-10
      • 1970-01-01
      • 2018-01-02
      • 2012-05-31
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多