Swift中UITableViewCell中的多个textLabels

时间:2016-05-03 23:55:31

标签: swift uitableview

我正在尝试生成包含多个textLabels的表格单元格,但我甚至无法定义textLabels。

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

    cell.label1.text = "Hello" //error..value of type 'UITableViewCell' has no member 'label1'
    cell.label2.text = "World" //error..

    return cell
}
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return 10
}

如何在UITableViewCell中定义textLabel以及如何在它们之间放置垂直空间? 提前谢谢。

1 个答案:

答案 0 :(得分:1)

仅当您将表格单元格样式设置为“基本”之类的默认类型时,

textLabel才是有效属性。如果你想做一些自定义的事情,比如创建你自己的标签,你应该指定“自定义”作为单元格类型。

Setting the cell style to "Custom"

然后,您可以布局UILabel并使用AutoLayout的约束,就像在Interface Builder中使用其他任何内容一样。

现在,因为您现在正在使用自定义单元格,所以您必须为您的单元格定义UITableViewCell的子类,以便您可以访问标签。

只需创建UITableViewCell的新Cocoa Touch子类,例如:

class MyCell: UITableViewCell {

    @IBOutlet weak var label1: UILabel!

    @IBOutlet weak var label2: UILabel!

}

请注意,那些标签属性是IBOutlet,可能是通过控件从Interface Builder中的标签拖动到我们的代码创建的,就像我们对任何其他UI插座一样。

实际上,为了能够从IB拖到这个类,我们必须指定IB中的原型单元实际上是这个类。为此,只需在检查器中指定自定义子类。

Specifying our custom subclass.

请注意,这是单元格的自定义子类,而不是表格视图。

唯一要做的就是确保我们的自定义单元格在IB中有一个标识符。在属性检查器中“样式”下的字段中,为您的单元格指定一个标识符,例如“cellID”。

现在,要从控制器引用它,请将代码更改为:

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {   
    let cell = self.tableView.dequeueReusableCellWithIdentifier("cellID", forIndexPath: indexPath) as! MyCell

    cell.label1.text = "Hello"
    cell.label2.text = "World"

    return cell
}

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

请注意,我们不应该使用UITableViewCell()而是dequeueReusableCellWithIdentifier创建单元格。这允许我们的表视图有效地自动重用单元格。只要我们在方法参数中指定了正确的标识符,我们就可以确定类型将是MyCell,因此我们可以继续强制转换它。