Swift:无法以编程方式配置自定义表格单元格?初始没叫?

时间:2016-08-25 14:50:00

标签: ios swift uitableview

好吧,我正在尝试以编程方式向我的自定义tableview单元格添加内容,如此处的mob最后一个问题所示 - Swift: tableview cell content is added again and again with each reload?初始化func tableView()中的所有内容会导致重叠。

我已逐字逐句地跟踪了这个问题Swift. Proper initialization of UITableViewCell hierarchy在我的自定义单元格类中(我在故事板中给出了一个名字)我有:

class EventTableCellTableViewCell: UITableViewCell {


    override init(style: UITableViewCellStyle, reuseIdentifier: String?) {
        super.init(style: style, reuseIdentifier: reuseIdentifier) // the common code is executed in this super call
        // code unique to CellOne goes here
        print("INIT")
        self.contentView.backgroundColor = UIColor.blackColor()
    }

    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
    }

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

    }

由于没有打印任何内容,因此未调用此init。错误来自我的主VC中的func tableView()。我最初有:

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCellWithIdentifier("eventCell", forIndexPath: indexPath) as! EventTableCellTableViewCell
//        cell.eventTitle.text = names[indexPath.row]
//        cell.eventDescription.text = descriptions[indexPath.row]

        cell.contentView.clipsToBounds = false

        //cell UIX
        let eventTitleLabel = UILabel()
        let dateLabel = UILabel()
        let authorLabel = UILabel()
        let locationLabel = UILabel()

        let categoryView = UIImageView()
//then I add everything 

但这没有用,所以我看了其他帖子,现在有了:

 func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {

        //var cell = tableView.dequeueReusableCellWithIdentifier("eventCell", forIndexPath: indexPath) as! EventTableCellTableViewCell

        var cell = tableView.dequeueReusableCellWithIdentifier("eventCell", forIndexPath: indexPath) as! UITableViewCell
        if (cell == nil) {
            cell = EventTableCellTableViewCell.init(style: .Default, reuseIdentifier: "eventCell")
        }

我也试过没有indexPath。现在我得到一个错误,单元格不能== nil,而不管我写的是什么init都没有被调用。

如何以编程方式配置我的单元格?

1 个答案:

答案 0 :(得分:2)

如果在故事板中设计了单元格,则仅调用init?(coder aDecoder: NSCoder),则永远不会调用init(style: style, reuseIdentifier:

您必须将Interface Builder中的单元格类设置为EventTableCellTableViewCell