在UICollectionViewCell中的UILabel的UIAppearance-选中/未选中

时间:2019-06-12 01:12:15

标签: swift uiappearance

我目前正在与UIAppearance合作处理项目中所有网点的颜色,这使我能够在iOS应用程序中创建自己的夜间模式“ DIY”版本。

样本:

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 :(得分:0)

最后找到了解决此问题的方法。我发布我的解决方案可能会对某人有所帮助。

首先,我为textColorhighlightedTextColor定义颜色

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

完美运行。

希望这可以帮助某人