Swift:无法以编程方式编辑自定义表格单元格的属性

时间:2019-03-23 16:15:58

标签: swift uitableview uiview uibackgroundcolor

我正在尝试更改自定义表格单元格中视图的颜色,但是有一个插座,可以正常工作。我可以更改此视图的其他属性,例如.isHidden,但.backgroundColor似乎不起作用。知道我在做什么错吗?

UIColor(名称:“绿色”)可在应用程序的其他部分使用,但是我也无法使用它来更改文本的颜色。我分配的颜色类型错误吗?情节提要中的值是否只是覆盖了此内容?如果是这样,我该如何阻止这种情况的发生?将其更改为= .red也不起作用。

代码如下:

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {


    let cell = tableView.dequeueReusableCell(withIdentifier: "ChapterCell") as! ChapterCell
    smallLabel(cell.chapterLabel, 18)
    cell.keepSubviewBackground = true

    if chapters[indexPath.row].completed == true {
        cell.chapterNumber.isHidden = true
        cell.chapterTick.isHidden = false
        cell.chapterLabel?.text = chapters[indexPath.row].generateTitle()
        cell.chapterLabel?.textColor = UIColor(named: "Green")
        cell.chapterNumberContainer.backgroundColor = UIColor(named: "Green")
    } else {
        cell.chapterLabel?.text = chapters[indexPath.row].generateTitle()
        cell.chapterNumber?.text = "#\(indexPath.row + 1)"
        cell.chapterTick.isHidden = true
        cell.chapterNumber.isHidden = false
        cell.chapterNumberContainer.backgroundColor = UIColor(named: "Eggshell")
    }

    if chapters[indexPath.row].locked == true {
        cell.chapterLabel?.alpha = 0.3
        cell.chapterNumberContainer?.alpha = 0.3
    } else {
        cell.chapterLabel?.alpha = 1
        cell.chapterNumberContainer?.alpha = 1
    }

    let cellBGView = UIView()
    cellBGView.backgroundColor = UIColor(red: 1.00, green: 1.00, blue: 1.00, alpha: 0.1)
    cell.selectedBackgroundView = cellBGView

    return cell
}

2 个答案:

答案 0 :(得分:1)

检查此内容,这可能是一个问题。 UITableViewCell textLabel color not changing 注意:无法评论声名狼藉,因此将其发布为答案。

答案 1 :(得分:0)

非常感谢所有建议,我最终选择了bsod建议的解决方案,并希望为以后需要此服务的任何人提供更多详细信息。 Rob的解决方案对我不起作用。

  1. 复制表格视图中的第一个自定义单元格,然后根据需要对其进行样式化。

enter image description here

  1. 创建第二个类,并将其分配给第二个单元格以及新的标识符。您也可以在第二堂课中创建所需的任何网点,并且它们可以使用相同的名称。

enter image description here enter image description here

  1. 在cellForRowAt indexPath方法中,我使用了if语句根据章节是否完成来对自定义单元格进行出队,然后相应地设置其样式。这会重复一些代码,但是必须对单元格进行类型转换才能工作(如果有人可以想到一种更好的方法,那么我可以选择)。

    func tableView(_ tableView:UITableView,cellForRowAt indexPath:IndexPath)-> UITableViewCell {

    if chapters[indexPath.row].completed == false {
        let cell = tableView.dequeueReusableCell(withIdentifier: "RegularCell") as! RegularCell
    
        cell.chapterLabel?.text = chapters[indexPath.row].generateTitle()
        cell.chapterNumber?.text = "#\(indexPath.row + 1)"
    
        if chapters[indexPath.row].locked == true {
            cell.chapterLabel?.alpha = 0.3
            cell.chapterNumberContainer?.alpha = 0.3
        } else {
            cell.chapterLabel?.alpha = 1
            cell.chapterNumberContainer?.alpha = 1
        }
    
        let cellBGView = UIView()
        cellBGView.backgroundColor = UIColor(red: 1.00, green: 1.00, blue: 1.00, alpha: 0.1)
        cell.selectedBackgroundView = cellBGView
        smallLabel(cell.chapterLabel, 18)
        cell.keepSubviewBackground = true
    
        return cell
    } else {
        let cell = tableView.dequeueReusableCell(withIdentifier: "CompletedCell") as! CompletedCell
    
        cell.chapterLabel?.text = chapters[indexPath.row].generateTitle()
    
        let cellBGView = UIView()
        cellBGView.backgroundColor = UIColor(red: 1.00, green: 1.00, blue: 1.00, alpha: 0.1)
        cell.selectedBackgroundView = cellBGView
        smallLabel(cell.chapterLabel, 18)
        cell.keepSubviewBackground = true
    
        return cell
    }