从UITableView设置时,UITableViewCell超类属性返回nil

时间:2018-08-24 14:23:14

标签: ios swift uitableview subclass

我为此花了很多时间。当从tableView设置属性时,UITableViewCell的主类/超级类的属性(isSender总是返回nil:

这是主单元格类:

   class MasterTableViewCell: UITableViewCell {

        @IBOutlet weak var userProfileImage:UIImageView!
        @IBOutlet weak var postTextLabel:UILabel!

    var isSender:Bool!

    override func awakeFromNib() {
// code here
    }

这是单元格子类:

class VideoPostTableViewCell: MasterTableViewCell {

    @IBOutlet weak var playButton: UIButton!



    override func awakeFromNib() {
    super.awakeFromNib()



    if isSender == true {
        print("true")
    }
    else {
        print("false")
    }

这是tableView方法:

func configureCell(indexPath: IndexPath) -> UITableViewCell {

        guard let cell = tableView.dequeueReusableCell(withIdentifier: "VideoPostTableViewCell") as? VideoPostTableViewCell else {
            return UITableViewCell()}

        let x = post.userID
        let y = user?.uid
        let isEqual = (x == y)
        cell.isSender = isEqual
        return cell

isSender始终返回nil

值得注意的是:直接在nil中设置isSender时也会返回VideoPostTableViewCell。另外,当我在let isEqual = (x == y)处设置一个断点时,isEqual返回true

最后,VideoPostTableViewCellMasterTableViewCell中还有其他属性,它们都在tableView中用相同的方法正确设置。我将它们排除在外以减少代码。

任何帮助,我们将不胜感激。谢谢!

2 个答案:

答案 0 :(得分:2)

根据OP的评论...

if isSender == true的评估是在awakeFromNib()内部进行的,但这是在 执行cell.isSender = isEqual之前发生的。 / p>

答案 1 :(得分:0)

在您的监护人声明中,您应解决其他情况:

guard let cell = tableView.dequeueReusableCell(withIdentifier: "VideoPostTableViewCell") as? VideoPostTableViewCell else {
        fatalError("Misconfigured cell type, VideoPostTableViewCell!")
}