Swift: невозможно программно редактировать свойства пользовательской ячейки таблицы - PullRequest
2 голосов
/ 23 марта 2019

Я пытаюсь изменить цвет представления внутри пользовательской ячейки таблицы, и у меня есть выход к нему, который работает. Я могу изменить другие свойства этого представления, например .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 ]

1 голос
/ 23 марта 2019

Проверьте это, это может быть проблемой здесь. UITableViewCell textLabel цвет не меняется Примечания: Нельзя комментировать, так как репутация меньше. Поэтому опубликовал его в качестве ответа.

0 голосов
/ 24 марта 2019

Большое спасибо за все предложения, в итоге я остановился на решении, предложенном bsod, и я хотел бы предоставить более подробную информацию всем, кто нуждается в этом в будущем. Решение Роба у меня не сработало.

  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
    }
    
...