我打算根据它所在的部分将UITableViewCell转发到不同的子类。
假设UITableViewCell的子类为CellOne
且它有一个var nameLabel
。在一种情况下,我将dequeueReusableCellWithIdentifier(_:_:)
返回的{UITableViewCell'转发({!}}并CellOne
并将其分配给cell
,这是在交换机块之外声明为var cell = UITableViewCell()
的变量。
但在此之后,cell
无法访问nameLabel
实例持有的CellOne
。我收到错误消息:“类型'UITableViewCell'的值没有成员nameLabel”。
所以似乎cell
没有被下载到UITableViewCell的子类。
cell
是否可以访问nameLabel
(在块外宣布之后)?通过在声明变量之后为其分配子类实例,可以将变量降级为另一种类型吗?
非常感谢你的时间。
这是我的代码:
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
var cell = UITableViewCell()
switch indexPath.section {
case 0:
cell = tableView.dequeueReusableCellWithIdentifier("cellOne", forIndexPath: indexPath) as! CellOne
cell.nameLabel.text = "one" // Error: Value of type 'UITableViewCell' has no member 'nameLabel'
case 1:
cell = tableView.dequeueReusableCellWithIdentifier("cellTwo", forIndexPath: indexPath) as! CellTwo
...... // Other cases
}
return cell
}
CellOne
的代码:
class CellOne: UITableViewCell {
@IBOutlet weak var nameLabel: UILabel!
......
}
答案 0 :(得分:0)
问题在于您声明变量cell
您明确表示其为UITableViewCell
,因此您将有问题将其转发为yourCustomCell
。
改变这个:
var cell = UITableViewCell()
根据您的评论,您想要使用多个自定义单元格
我认为您应该在案件代码区块中声明这些海关单元
switch indexPath.section
{
case 0:
let cell = tableView.dequeueReusableCellWithIdentifier("cellOne", forIndexPath: indexPath) as! CellOne
cell.nameLabel.text = "one"
case 1:
let secondCell = tableView.dequeueReusableCellWithIdentifier("cellTwo", forIndexPath: indexPath) as! CellTwo
// do whatever you want
}
答案 1 :(得分:0)
我觉得最好让你的细胞更通用,因为它们可以在多个部分中使用#39;。即。而不是' CellOne'创建您的单元格' NameCell'可以在表格的所有部分使用。
细胞应该是可重复使用的。
let nameCell = tableView.dequeueReusableCellWithIdentifier("nameCell") as! NameCell
switch indexPath.section{
case 0:
nameCell.nameLabel.text = "name1"
break
case 1:
nameCell.nameLabel.text = "name2"
break
...
default:
...
}