在Swift中切换自定义单元格

时间:2014-12-30 14:42:11

标签: ios xcode uitableview swift

我正在尝试在swift中切换两个自定义单元类,但我似乎无法弄清楚如何返回单元格。

我的代码如下所示,错误位于最后一行:

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

    if istrue{
    var cell: CustomTableCell = self.tv.dequeueReusableCellWithIdentifier("cell") as CustomTableCell

        let data = myList[indexPath.row] as Model

        cell.customLabel.text = data.username
        cell.dateLabel.text = printDate(data.date)
        return cell

    }else{
        var cell: CustomTableCell2 = self.tv.dequeueReusableCellWithIdentifier("cell") as CustomTableCell2

        let data = myList[indexPath.row] as Model

        cell.titleLabel.text = data.username
        cell.dateLabel2.text = printDate(data.date)

     return cell
    }

}return nil

我还尝试在最后一行“返回单元格”并删除if-和else语句中的另外两行“返回单元格”,但这不起作用,它只是给了我错误说“cell”是一个未解析的标识符。

我之前从未这样做过,所以我不确定这是解决这个问题的正确方法。

有关如何继续的任何建议将不胜感激。

1 个答案:

答案 0 :(得分:5)

定义UITableViewCell类型的变量并在if和else分支中初始化它,然后将其用作返回值:

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

    var retCell: UITableViewCell

    if istrue{
        var cell: CustomTableCell = self.tv.dequeueReusableCellWithIdentifier("cell") as CustomTableCell

        let data = myList[indexPath.row] as Model

        cell.customLabel.text = data.username
        cell.dateLabel.text = printDate(data.date)

        retCell = cell

    }else{
        var cell: CustomTableCell2 = self.tv.dequeueReusableCellWithIdentifier("cell") as CustomTableCell2

        let data = myList[indexPath.row] as Model

        cell.titleLabel.text = data.username
        cell.dateLabel2.text = printDate(data.date)

        retCell = cell
    }

    return retCell
}

请注意,您无法返回nil,因为此方法的返回类型是非可选UITableViewCell,因此它必须始终是({1}}派生的类的实例

或者,您可以像在if和else分支上一样返回单元格,但是从if / else范围中删除结尾UITableViewCell - 不需要它。此外,在您的代码中,它也是错误的,因为在方法范围之外。

个人注意事项:在函数中我通常会在身体中间避免return语句,最后选择一条退出路径 - 这只是个人偏好,所以请随意选择一个你更喜欢