自定义表视图插座抛出零

问题描述

我正在尝试使用遵循此 tutorial 的 VIPER 模式实现一个简单的 iOS 应用程序。该应用程序是一个简单的表格视图,它显示来自 json req 的数据

我已经创建了表格视图,并且可以使用默认的 cell.textLabel 成功显示来自我的对象的数据。然而,我正在尝试创建一个自定义表格视图单元格,因此创建了笔尖和类。我已将所有插座从笔尖正确连接到该类,该类的代码如下:

class CustomTableViewCell: UITableViewCell {
    
    static let identifier = "CustomTableView"
    
    static func nib() -> UINib {
        return UINib(nibName: "CustomTableViewCell",bundle: nil)
    }

    @IBOutlet var level: UILabel!
    @IBOutlet var levelNumber: UILabel!
    @IBOutlet var progress: UIProgressView!
    @IBOutlet var leftProgress: UILabel!
    @IBOutlet var rightProgress: UILabel!
    
    public func configure(levelString: String,levelNum: String,prog: Float,left: String,right: String) {
        level.text = levelString
        levelNumber.text = levelNum
        progress.setProgress(prog,animated: true)
        leftProgress.text = left
        rightProgress.text = right
    }

    override func awakeFromNib() {
        super.awakeFromNib()
    }
}

问题是,当我运行应用程序时,这些插座出错:配置函数内的 Fatal error: Unexpectedly found nil while implicitly unwrapping an Optional value 上的 level.text。在我看来,我可以通过这样做来抑制这个错误: table.register(CustomTableViewCell.nib(),forCellReuseIdentifier: CustomTableViewCell.identifier) 但是这只是显示一个没有自定义行或任何数据的空 tableView。如果我执行 table.register(CustomTableViewCell.self,forCellReuseIdentifier: CustomTableViewCell.identifier) 那么这会崩溃。我应该怎么做,如何让数据显示在 tableView 中?相关代码添加如下:

let tableView: UITableView = {
    let table = UITableView()
    table.register(CustomTableViewCell.nib(),forCellReuseIdentifier: CustomTableViewCell.identifier)
    table.isHidden = true
    return table
}()

override func viewDidLoad() {
    super.viewDidLoad()
    view.addSubview(tableView)
    tableView.delegate = self
    tableView.dataSource = self
}

override func viewDidLayoutSubviews() {
    super.viewDidLayoutSubviews()
    tableView.frame = view.bounds
    label.frame = CGRect(x: 0,y: 0,width: 200,height: 50)
    label.center = view.center
}

func tableView(_ tableView: UITableView,numberOfRowsInSection section: Int) -> Int {
    return achievements.count
}

func tableView(_ tableView: UITableView,cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    
    let cell = tableView.dequeueReusableCell(withIdentifier: CustomTableViewCell.identifier,for: indexPath) as! CustomTableViewCell
    cell.configure(levelString: "Level",levelNum: achievements[indexPath.row].level,prog: Float(achievements[indexPath.row].progress/achievements[indexPath.row].total),left: String(achievements[indexPath.row].progress),right: String(achievements[indexPath.row].total))
    return cell
}

出口设置:

Outlet setup

文件所有者:

Files owner

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)