在Dynamic Prototype表中需要一些静态单元格

时间:2016-02-13 19:25:36

标签: ios swift uitableview

Hello在我的TableViewController我需要前三个静态单元格,然后是动态单元格。我已经做了一些研究,并提出我可以在动态表原型中做静态单元格,但反之亦然。

所以我拖动一个tableViewController并选择动态原型并添加了4个原型单元格(3个静态单元格和1个动态单元格),并为它们中的每个四个提供不同的标识符,并将类TableViewCell添加到其中所有四个。我也创建了一个TableViewCell类。

现在我收到此错误

fatal error: unexpectedly found nil while unwrapping an Optional value 

这是我的代码

 let NUMBER_OF_STATIC_CELLS = 3
    var labels = ["label1","label2","label3"]

    override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {


        return labels.count + 1



    }

    override func numberOfSectionsInTableView(tableView: UITableView) -> Int {
        return 1
    }
    override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {



        var cell:  TestViewCell!

        print(indexPath.row)
        if (indexPath.row == 0) {
            cell = tableView.dequeueReusableCellWithIdentifier("static1", forIndexPath: indexPath) as! TestViewCell


        }

        if (indexPath.row == 1) {
                cell = tableView.dequeueReusableCellWithIdentifier("static2", forIndexPath: indexPath) as! TestViewCell
            //cell.cardSetName?.text = self.cardSetObject["name"] as String
            }

            if (indexPath.row == 2) {
                cell = tableView.dequeueReusableCellWithIdentifier("static2", forIndexPath: indexPath) as! TestViewCell
                //cell.cardSetName?.text = self.cardSetObject["name"] as String
            }





            cell = tableView.dequeueReusableCellWithIdentifier("cell", forIndexPath: indexPath) as! TestViewCell
            cell.testLabel.text = "row \(indexPath.row)" // return test rows as set in numberOfRowsInSection


        return cell; //getting error here

    }

更新

好的错误已被删除。现在我提出了另一个问题。我想知道总共有4行。 3是静态的,然后其余的将是动态的。然后是什么总行数。我这样做

labels.count+2 //2 static cells(0 1 2 )

但是我得到致命的错误:数组索引超出范围

2 个答案:

答案 0 :(得分:0)

如果行为4或更多,则没有代码可以返回单元格。改变这个:

if (indexPath.row == 3) {

到此:

if (indexPath.row >= 3) {

或者只是将其更改为:

else {

答案 1 :(得分:0)

上面的代码有一些错误:

indexPath.row == 2时应该是"静态3"。

放置定义" cell"的代码的最后一行。在else语句中,阻止它始终执行。当你这样做,它应该工作。 像这样:

    override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        var cell: TestViewCell!

        if (indexPath.row == 0) {
            cell = tableView.dequeueReusableCellWithIdentifier("static1", forIndexPath: indexPath) as! TestViewCell
        }

        if (indexPath.row == 1) {
            cell = tableView.dequeueReusableCellWithIdentifier("static2", forIndexPath: indexPath) as! TestViewCell
        }

        if (indexPath.row == 2) {
            cell = tableView.dequeueReusableCellWithIdentifier("static3", forIndexPath: indexPath) as! TestViewCell
        }
        else{
            cell = tableView.dequeueReusableCellWithIdentifier("dynamic\(indexPath.row-2)", forIndexPath: indexPath) as! TestViewCell
        }
        cell.testLabel.text = "row \(indexPath.row)"
        return cell
    }