如何以编程方式更改 UIDatePicker 的选定日期颜色 - Swift 4?

How to change selected date color of UIDatePicker programmatically - Swift 4?

我以编程方式创建了 UIDatePicker 并添加到 UITableViewCell。一切正常,但即使在应用 tintColor.

后日期颜色也没有改变

我的实现是:

   var startDatePicker: UIDatePicker = {
    let datePicker = UIDatePicker()
    datePicker.timeZone = NSTimeZone.local
    datePicker.backgroundColor = UIColor.clear
    datePicker.layer.cornerRadius = 5.0
    datePicker.datePickerMode = .date
    datePicker.maximumDate = Date()
    datePicker.isHidden = true
    datePicker.tintColor = UIColor.white
    datePicker.tag = 0
    datePicker.addTarget(self, action: #selector(datePickerValueChanged(datePicker:)), for: .valueChanged)
    return datePicker
}()

我想以 白色 显示,但默认显示 黑色 彩色。另请参阅屏幕截图。

参考了 this 个答案。

Apple 文档说:

The appearance of UIDatePicker is not customizable. You should integrate date pickers in your layout using Auto Layout. Although date pickers can be resized, they should be used at their intrinsic content size. Apple Doc

但是如果你想自定义文本颜色,有一种方法可以使用私有 API 来实现,如下所示:

datePicker.setValue(UIColor.whiteColor(), forKeyPath: "textColor")

但是,私有 API 可能会停止工作,甚至会在以后的任何 iOS 更新中导致崩溃。

那么稳定的解决方案是使用 UIPickerView 创建您自己的日期选择器,并且在使用它时您可以自定义文本颜色,例如:

func pickerView(_ pickerView: UIPickerView, attributedTitleForRow row: Int, forComponent component: Int) -> NSAttributedString? {
    let attributedString = NSAttributedString(string: pickerData[row], attributes: [NSAttributedStringKey.foregroundColor : UIColor.white])
    return attributedString
}

毕竟,我找到了使用私有 API KVC 本身的方法 ( ans):

datePicker.setValue(UIColor.white, forKeyPath: "textColor")

但我观察到,如果我们使用 closure 实现 UIDatePicker,那么上面 API 必须同时分配 UIDatePicker 的闭包实例和 UIDatePicker 的外部实例。然后只有它的工作。

例如 UIDatePicker 的外部实例 (startDatePicker) 也需要在 KVC 下面设置。

startDatePicker.setValue(UIColor.white, forKeyPath: "textColor")

回答是的,它适用于 Swift 4.

参考更新后的截图: