TableView在UITableViewCell内部 - 必须注册一个nib或类

时间:2017-09-12 07:14:42

标签: ios uitableview swift3

我将UITableView置于UITableViewCell内。

我已将UITableViewCell的课程扩展为,UITableViewDataSource, UITableViewDelegate

制作@IBOutlet var tableView: UITableView!

添加了以下内容:

override init(style: UITableViewCellStyle, reuseIdentifier: String?) {
        super.init(style: style , reuseIdentifier: reuseIdentifier)
        setUpTable()
    }

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

    override func awakeFromNib() {
        super.awakeFromNib()
        setUpTable()
    }

setUpTable()实施为:

func setUpTable(){
        tableView?.delegate = self
        tableView?.dataSource = self
        //tableView.register(UINib(nibName: "AvailableTimingsTableViewCell", bundle: nil), forCellReuseIdentifier: "TimingCell")
    }

如果我将注释行保留在setUpTable()中,我会:

  

'无法使用标识符TimingCell将单元格出列 - 必须注册a   nib或标识符的类或连接原型单元格   故事板'

如果我取消注释我得到的评论:

  

致命错误:在解包可选值时意外发现nil

在同一条线上。

setUpTable()之后我将其实施为:

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

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

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

        let cell = tableView.dequeueReusableCell(withIdentifier: "TimingCell", for: indexPath) as?AvailableTimingsTableViewCell

        cell?.dayNameLabel.text = "Wednesday"
        cell?.timeLabel.text = "01:00 PM - 03:00 PM"

        return (cell)!
    }

编辑以下是班级名称的屏幕截图。根据评论和回答,我已经仔细检查了一切是否正常 enter image description here enter image description here

2 个答案:

答案 0 :(得分:1)

我认为init()中的setUpTable()过早被调用。此时视图未加载。在viewDidLoad()中进行设置,也不要注释掉注册单元格。除了那段代码看起来不错。

答案 1 :(得分:0)

请检查以下几点

1)您需要在XIB中注册小区标识符,

2)将班级名称分配给XIB

3)你需要检查的行的单元格?出列的YourClass和

4)使用您分配给XIB的相同标识符出列并注册(以下是我的问题)