我正在尝试生成包含多个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以及如何在它们之间放置垂直空间? 提前谢谢。
答案 0 :(得分:1)
textLabel
才是有效属性。如果你想做一些自定义的事情,比如创建你自己的标签,你应该指定“自定义”作为单元格类型。
然后,您可以布局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中的原型单元实际上是这个类。为此,只需在检查器中指定自定义子类。
请注意,这是单元格的自定义子类,而不是表格视图。
唯一要做的就是确保我们的自定义单元格在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
,因此我们可以继续强制转换它。