我想创建自定义TableViewCells,因此我创建了一些从UITableViewCell扩展的类型typeACell / typeBCell。
现在在
tableView-cellForRowAtIndexPath -> UITableViewCell
我想动态返回单元格。当我想通过
创建一次返回值时,如何返回我的自定义单元格let dynCell:UITableViewCell!
我的方法有哪些改变
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell{
let cellTypeSelector = DynamicCellSelector.getTypeAnyhow()
let dynCell:UITableViewCell!
if cellTypeSelector.isTypeA() {
dynCell = tableView.dequeueReusableCellWithIdentifier("typeACell", forIndexPath: indexPath) as? TypeACell
(dynCell as! TypeACell).titleBar.text = ""
}
else if cellTypeSelector.isTypeB() {
dynCell = tableView.dequeueReusableCellWithIdentifier("typeBCell", forIndexPath: indexPath) as? TypeBCell
(dynCell as! TypeBCell).titleBar.text = ""
}
else {
dynCell = tableView.dequeueReusableCellWithIdentifier("unknownTypeCell", forIndexPath: indexPath) as? UnknownTypeCell
(dynCell as! UnknownTypeCell).titleBar.text = ""
}
return dynCell
}
这会引发错误:
变量' dynCell'在初始化之前使用
日Thnx!
答案 0 :(得分:1)
试试这个(使用你的代码):
let cellTypeSelector = DynamicCellSelector.getTypeAnyhow()
let dynCell: UITableViewCell = tableView.dequeueReusableCellWithIdentifier("typeACell", forIndexPath: indexPath) as? TypeACell;
if cellTypeSelector.isTypeB() {
dynCell = tableView.dequeueReusableCellWithIdentifier("typeBCell", forIndexPath: indexPath) as? TypeBCell
(dynCell as! TypeBCell).titleBar.text = ""
}else{
(dynCell as! TypeACell).titleBar.text = ""
}
return dynCell
答案 1 :(得分:1)
您收到此错误,因为初始化单元格的条件不明确。第一个if
语句有一个else
分支,但第二个if
语句没有。如果两个条件均为假,则单元格将保持未初始化状态。
您可以通过添加第二个else
分支来解决此问题:
if cellTypeSelector.isTypeA() {
dynCell = tableView.dequeueReusableCellWithIdentifier("typeACell", forIndexPath: indexPath) as? TypeACell
(dynCell as! TypeACell).titleBar.text = ""
}
else if cellTypeSelector.isTypeB() {
dynCell = tableView.dequeueReusableCellWithIdentifier("typeBCell", forIndexPath: indexPath) as? TypeBCell
(dynCell as! TypeBCell).titleBar.text = ""
}
else {
dynCell = UITableViewCell()
}
return dynCell
如果您确定该单元格为TypeB,则可以删除第二个if
语句:
if cellTypeSelector.isTypeA() {
dynCell = tableView.dequeueReusableCellWithIdentifier("typeACell", forIndexPath: indexPath) as? TypeACell
(dynCell as! TypeACell).titleBar.text = ""
}
else {
dynCell = tableView.dequeueReusableCellWithIdentifier("typeBCell", forIndexPath: indexPath) as? TypeBCell
(dynCell as! TypeBCell).titleBar.text = ""
}
return dynCell
答案 2 :(得分:0)
当我将let更改为var并解压缩它似乎有效的值时 - 这是正确的方法吗?
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell{
let cellTypeSelector = DynamicCellSelector.getTypeAnyhow()
var dynCell:UITableViewCell!
if cellTypeSelector.isTypeA() {
dynCell = (tableView.dequeueReusableCellWithIdentifier("typeACell", forIndexPath: indexPath) as? TypeACell)!
(dynCell as! TypeACell).titleBar.text = ""
}
else if cellTypeSelector.isTypeB() {
dynCell = (tableView.dequeueReusableCellWithIdentifier("typeBCell", forIndexPath: indexPath) as? TypeBCell)!
(dynCell as! TypeBCell).titleBar.text = ""
}
else {
dynCell = (tableView.dequeueReusableCellWithIdentifier("unknownTypeCell", forIndexPath: indexPath) as? UnknownTypeCell)!
(dynCell as! UnknownTypeCell).titleBar.text = ""
}
return dynCell
}