如何在Swift中创建自定义UITableViewCell类?

时间:2015-02-01 00:36:03

标签: ios uitableview swift

我正在尝试在Swift中遵循以下Using Auto Layout in UITableView for dynamic cell layouts & variable row heights首要答案,但是对于IOS 7版本来说,可以减轻IOS 8中的一些错误。

现在,我的自定义单元格类是:

class PostCell: UITableViewCell {

    @IBOutlet var name: UILabel!
    @IBOutlet var timestamp: UILabel!
    @IBOutlet var postBody: UILabel!

    override func awakeFromNib() {
        super.awakeFromNib()
        // Initialization code
    }

    override func setSelected(selected: Bool, animated: Bool) {
        super.setSelected(selected, animated: animated)

        // Configure the view for the selected state
    }

}

在我的故事板中,我将自定义类设置为单元格的类。我不知道是否必须在任何地方使用我的reuseIdentifier。我不知道如何在下一段代码中使用它。

func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {

    var cell = PostCell()

    var post = self.posts[indexPath.row]

    cell.name.text = post.name
    cell.timestamp.text = post.timestamp
    cell.postBody.text = post.body

    cell.setNeedsUpdateConstraints()
    cell.updateConstraintsIfNeeded()

    cell.bounds = CGRectMake(0.0, 0.0, CGRectGetWidth(feed.bounds), CGRectGetHeight(cell.bounds))

    cell.setNeedsLayout()
    cell.layoutIfNeeded()

    var height = cell.contentView.systemLayoutSizeFittingSize(UILayoutFittingCompressedSize).height

    height += 1.0

    return height
}

我认为这会有效,但当我致电cell.name.text = post.name时,我会得到EXC_BAD_INSTRUCTION。我猜这个单元格没有正确地连接到故事板上。我该如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

问题在于你不了解笔尖是如何工作的。您已将PostCell设置为从其笔尖加载后进行配置:

class PostCell: UITableViewCell {
    @IBOutlet var name: UILabel!
}

这意味着namenil - 直到从nib实例化此单元格,此时插座将被连接起来。但后来你说:

var cell = PostCell()

是错误的PostCell!你没有从笔尖加载它;你刚用整块布做了一件。因此,由于没有笔尖加载,插座(正如您正确怀疑的)自然从未连接过,因此cell.namenil

因此,解决方案是:制作整个布料。从笔尖加载。