首页 文章

阻止UILabel文本颜色更改,以覆盖swift中的占位符文本颜色更改

提问于
浏览
4

我'm trying to make global color changes to an iOS app. I'遇到了一个问题,其中对 UILabel.appearance().textColor 的更改传播到UITextField占位符文本 . 我已经尝试过以下代码的解决方案,但我最终得到了所有绿色文本 .

UILabel.appearance().textColor = UIColor.greenColor()

// UITextField placeholder color
UILabel.appearanceWhenContainedInInstancesOfClasses([UITextField.self]).textColor = UIColor.cyanColor()

1 回答

  • 1

    无法使用UIAppearance指定占位符文本颜色 . (只有使用 UI_APPEARANCE_SELECTOR 声明的属性才有可用 . )最安全的选择是使用UITextField子类;这是一个在Interface Builder中使颜色可管理的方法 .

    @IBDesignable class PCTextField: UITextField {
        @IBInspectable var placeholderColor: UIColor = UIColor.redColor() {
            didSet {
                if let placeholder = self.placeholder {
                    let colorAttribute = [NSForegroundColorAttributeName: placeholderColor]
                    attributedPlaceholder = NSAttributedString(string: placeholder, attributes: colorAttribute)
                }
            }
        }
    }
    

    如果您在代码中进行颜色更改,则从NSUserDefaults设置中分配 placeholderColor 将适合基于UIAppearance的管理 .

相关问题