带有自定义单元格的UITableView为空

时间:2016-02-18 11:51:30

标签: ios swift uitableview

我实施了两个自定义单元格:

class TextFieldCell: UITableViewCell{
    var label = UILabel()
    var textField = UITextField()

    override init(style: UITableViewCellStyle, reuseIdentifier: String?) {
        super.init(style: style, reuseIdentifier: reuseIdentifier)
        label.text = "Name"
        textField.placeholder = "Enter Task Name Here"
        addSubview(label)
        addSubview(textField)
    }

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

class SwitchCell : UITableViewCell {
    var label = UILabel()
    var switchControl = UISwitch()

    override init(style: UITableViewCellStyle, reuseIdentifier: String?) {
        super.init(style: style, reuseIdentifier: reuseIdentifier)
        label.text = "State"
        switchControl.on = true
        addSubview(label)
        addSubview(switchControl)
    }

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

在我的表视图类中,我已经声明了这两个单元格:

let textFieldCell = TextFieldCell(style: .Default, reuseIdentifier: "textFieldCell")
let switchCell = SwitchCell(style: .Default, reuseIdentifier: "switchCell")

并且在其中有委托方法:

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        switch indexPath.row {
        case 0: return textFieldCell
        case 1: return switchCell
        default: return UITableViewCell()
        }
    }

但是当表视图加载时,我只看到第二行左侧的开关控制。我不知道为什么。

2 个答案:

答案 0 :(得分:1)

试试这个:

private let reuseIdentifier = "switchCell"
//identifier of your cell.

似乎你错过了注册单元格。

    let tableNib = UINib(nibName:"SwitchCell", bundle:nil)
    self.tableView!.registerNib(tableNib,forCellReuseIdentifier:reuseIdentifier)

答案 1 :(得分:0)

TextFieldCell在TableViewCell的ViewDidLoad中添加了以下代码

self.tableView.registerClass(SwitchCell, forCellReuseIdentifier: "switchCell")
self.tableView.registerClass(TextFieldCell, forCellReuseIdentifier: "textFieldCell")