我正在尝试创建一个UITableview
的屏幕,其中包含部分和不同的行类型(shown here)。问题是,当尝试更改频率单元格中的详细信息标签的值时,它表示它是一个只获取属性。频率单元设置为"右键详细信息"在故事板中。
我的代码是:
let frequencyCellID = "frequencyCell"
let decksCellID = "decksCell"
let pickerCellID = "pickerCell"
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
var cell:UITableViewCell?
switch (indexPath.section,indexPath.row){
case (0,0): cell = tableView.dequeueReusableCellWithIdentifier(frequencyCellID)
//line below shows error
cell?.detailTextLabel? = "test"
case (0,1): cell = tableView.dequeueReusableCellWithIdentifier(pickerCellID)
case (1,0): cell = tableView.dequeueReusableCellWithIdentifier(decksCellID)
cell?.detailTextLabel? = "test"
default: break
}
return cell!
另外,我怎样才能避免在最后一行强制展开单元?我试图初始化一个空的TableViewCell,但似乎没有空的初始化器。
答案 0 :(得分:0)
首先,您应该从表格视图中请求一个单元格:
let cell = tableView.dequeueReusableCellWithIdentifier(frequencyCellID, forIndexPath: indexPath)
还有额外的indexPath
参数,此方法保证返回非可选的UITableViewCell实例。这也会使您的单元格实例不可选,因此您无需打开它。您应该阅读这两种方法的不同之处,有很多相关信息。
您遇到的另一个问题:detailTextLabel是一个UILabel实例,因此您需要通过text
属性设置其内容。像这样:
cell.detailTextLabel?.text = "test"
答案 1 :(得分:0)
在有错误的行中,您要将String
分配给cell?.detailTextLabel?
,这是UILabel?
的实例,而不是String
。要为标签的文本指定String
,请执行cell?.detailTextLabel?.text = "test"
。
此外,detailTextLabel?
属性为readonly
,这意味着您无法将自己的UILabel?
实例分配给它。但是,你可以做什么,设置你需要的任何属性,以便根据自己的喜好自定义它。因此,您可以执行cell?.detailTextLabel?.backgroundColor =
或cell?.detailTextLabel?.font =
等等。
至于解开细胞,你应该用你的细胞
let cell = tableView.dequeueReusableCellWithIdentifier(frequencyCellID, forIndexPath:indexPath)
此方法不返回可选项。