Внешний вид UILabel в UICollectionViewCell - выбран / не выбран - PullRequest
0 голосов
/ 12 июня 2019

В настоящее время я работаю с UIAppearance для цветов всех моих выходов в моем проекте, что позволило мне создать свою собственную версию DIY для ночной моды в моем приложении для iOS.

образец:

UILabel.appearance().textColor = colorScheme.primaryColor 
UILabel.appearance(whenContainedInInstancesOf: [MyController.self]).textColor = colorScheme.secondaryColor 
... 

Примечание: Colorscheme - это просто структура со всеми моими цветами, которые переключаются в зависимости от состояния .lightMode / .darkMode

Недавно я создал подкласс UICollectionViewCell с UILabel внутри, и я хотел использовать тот же метод для определения цветов внутри него. Однако мне трудно выяснить , как установить другой цвет для вложенной UILabel в зависимости от выбранного состояния ячейки .

Например:

// create a default UIView with specific backgroundColor 
let selectedBackgroundView = UIView()
selectedBackgroundView.backgroundColor = colorScheme.selectedBackgroundColor

MyCollectionViewCell.appearance().backgroundColor = colorScheme.backgroundColor // default 
MyCollectionViewCell.appearance().selectedBackgroundView = selectedBackgroundView // set specific view used when cell is selected

Этот код выше работает, когда я хочу установить разные цвета фона, когда выбран MyCollectionViewCell или нет, однако я хочу, чтобы вложенный UILabel также изменил свой fontColor, в зависимости от того, выбрана ячейка или нет , Есть ли лучший способ добиться этого с UIAppearance?

1 Ответ

0 голосов
/ 12 июня 2019

Наконец-то нашли решение этой проблемы.Я публикую свое решение, оно может кому-то помочь.

сначала я определяю цвет для textColor и highlightedTextColor

UILabel.appearance(whenContainedInInstancesOf: [MyCollectionViewCell.self]).textColor = colorScheme.color1
UILabel.appearance(whenContainedInInstancesOf: [MyCollectionViewCell.self]).highlightedTextColor = colorScheme.color2

Затем в MyCollectionViewCell я "связываю" isSelected с UILabel isHighlighted:

class MyCollectionViewCell: UICollectionViewCell {

    @IBOutlet weak var myLabel: UILabel!

    override var isSelected: Bool {
        didSet {
            self.myLabel.isHighlighted = isSelected
        }
    }
}

Работает без нареканий.

Надеюсь, это кому-нибудь поможет

...