微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在 UITableViewCell 中的awakeFromNib 中无法访问IBOutlet

如何解决在 UITableViewCell 中的awakeFromNib 中无法访问IBOutlet

据我所知,我已经正确设置了一切(注册和出队)。但是,当我尝试在awakeFromNib() 中访问插座时,我得到

'致命错误:在隐式解包可选值时意外发现 nil:文件 ....MechEntryCell.swift,第 18 行'

这很奇怪,因为其他 UITableViewCells 做类似的事情似乎工作正常 - 和我看起来一样。

代码失败:

class MechEntryCell: UITableViewCell {

    @IBOutlet weak var mechName: UILabel!
    
    override func awakeFromNib() {
        super.awakeFromNib()
        mechName.text = "Hello"    <<<<<<< CRASHES
    }

    func setdamageOption(_ damageOption: AdditionaldamageOption) {
        mechName.font = UIFont.boldSystemFont(ofSize: mechName.font.pointSize)
        mechName.text = damageOption.label    <<<< WORKS FINE IF ABOVE CRASH REMOVED
    }
}

其中有一个 .xib 文件,其中标签已正确链接

enter image description here

我也注册和出队:

override func viewDidLoad() {
        super.viewDidLoad()

        tableView.delegate = self
        tableView.dataSource = self

        tableView.register(UINib(nibName: MechEntryCell,bundle: nil),forCellReuseIdentifier: "MechEntryCell")
........
}

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

    func tableView(_ tableView: UITableView,cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        if let cell = tableView.dequeueReusableCell(withIdentifier: MechEntryCell.identifier) as? MechEntryCell {
            cell.setdamageOption(tempdamageOptions[indexPath.item])
            return cell
        }
        return UITableViewCell()
    }

    func numberOfSectionsInTableView(tableView: UITableView) -> Int {
        return 1
    }

特别说明: 当我在 tableView(cellforRowAt:) 方法中设置标签时,它工作正常 - 所以 IBOutlet 最终会链接。我做错了什么?

解决方法

我对解决方案感到羞耻。

在设置过程中的某个地方,我不小心将根视图的自定义类设置为 MechEntryCell 的自定义类。删除它解决了这个问题。 enter image description here

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。