无法设置UITableViewCell的详细信息标签

时间:2016-04-03 19:47:40

标签: ios uitableview

我正在尝试创建一个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,但似乎没有空的初始化器。

2 个答案:

答案 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)

此方法不返回可选项。