在iOS8 / Swift中为UIDatePicker设置文本颜色和字体

时间:2015-02-09 18:58:06

标签: ios swift uidatepicker

我一直无法设置UIDatePicker 字体颜色。我的应用程序中的其他所有内容都非常简单,除此之外。有人知道怎么做这个吗?我正在使用 Swift iOS8

screenshot

14 个答案:

答案 0 :(得分:27)

将日期模式更改为其他内容似乎强制使用新设置的文本颜色重新绘制。

datePicker.setValue(UIColor.whiteColor(), forKeyPath: "textColor")
datePicker.datePickerMode = .CountDownTimer
datePicker.datePickerMode = .DateAndTime //or whatever your original mode was

答案 1 :(得分:11)

您只需在viewdidLoad / viewWillAppear中设置2行代码,即可使用DatePicker。

dobDatePicker.setValue(UIColor.whiteColor(), forKeyPath: "textColor")
dobDatePicker.setValue(false, forKey: "highlightsToday")

查看结果如下:

enter image description here

答案 2 :(得分:5)

试试这个:

    /* set color for UIDatePicker font */

    //text color of today string
    self.datePicker.performSelector("setHighlightsToday:", withObject:Constants.Colors.mainHeaderColor)

    //text color for hoglighted color
    self.datePicker.performSelector("_setHighlightColor:", withObject:Constants.Colors.mainHeaderColor)

    //other text color
    self.datePicker.setValue(Constants.Colors.mainHeaderColor, forKey: "textColor")

答案 3 :(得分:5)

你可以使用

datePicker.setValue(UIColor.whiteColor(), forKey: "textColor")
datePicker.setValue(false, forKey: "highlightsToday")
//for selector color
datePickerView.subviews[0].subviews[1].backgroundColor = UIColor.whiteColor()
datePickerView.subviews[0].subviews[2].backgroundColor = UIColor.whiteColor()

答案 4 :(得分:5)

我相信这是倒数计时器的最终解决方案 这是yildirimosman答案的扩展。

//text color
datePicker.setValue(UIColor.whiteColor(), forKey: "textColor")
//picker background
datePicker.subviews[0].subviews[0].backgroundColor = UIColor.clearColor() //the picker's own background view
//dividers
datePicker.subviews[0].subviews[1].backgroundColor = UIColor.whiteColor()
datePicker.subviews[0].subviews[2].backgroundColor = UIColor.whiteColor()
//labels: "hours" and "min"
datePicker.subviews[0].subviews[3].setValue(UIColor.lightGrayColor(), forKey: "textColor")
datePicker.subviews[0].subviews[4].setValue(UIColor.lightGrayColor(), forKey: "textColor")
//refresh the tableview (to force initial row textColor to change to white)
datePicker.subviews[0].setNeedsLayout()
datePicker.subviews[0].layoutIfNeeded()

答案 5 :(得分:3)

API没有提供这样做的方法。您可以使用UIPickerView而不是使用UIDatePicker自己创建一个非常令人信服的副本。 Se here

答案 6 :(得分:3)

您可以使用forKeyPath设置值:" textColor"。代码:

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

其中datePicker是您的UIDatePicker对象,第一个参数是您想要的颜色

答案 7 :(得分:3)

我想这样做,但是当有人在现在之前或之后设定了日期时设定它。我不得不重新加载数据,但是当我这样做时,最后使用上面的例子将其设置为当前的DateTime。

所以我所做的是设置一个临时值,然后在重新加载后设置它。它确实使它做了一个动画效果,但它的工作原理。如果你知道更好的方法,请告诉我......

func dateChanged(sender: UIDatePicker) {
    print(sender.date.description)

    let tempDate = sender.date
    let currentDate = NSDate()

    if originalDate.isLessThanDate(currentDate) {
        originalDate = sender.date
        if sender.date.isGreaterThanDate(currentDate) {
            sender.setValue(UIColor.blackColor(), forKeyPath: "textColor")
            sender.datePickerMode = .CountDownTimer
            sender.datePickerMode = .DateAndTime
            sender.date = tempDate
            sender.reloadInputViews()
        }
    }

    if sender.date.isLessThanDate(currentDate) {
        sender.setValue(UIColor.redColor(), forKeyPath: "textColor")
        sender.datePickerMode = .CountDownTimer
        sender.datePickerMode = .DateAndTime
        sender.date = tempDate
        sender.reloadInputViews()
    }
}

答案 8 :(得分:3)

将textColor和highlightToday添加到用户定义的变量对我来说很有用:

IB screenshot

答案 9 :(得分:2)

这对我有用:

为所有日期选择器子视图设置文本颜色

for view in datePicker.subviews {
    view.setValue(UIColor.white, forKeyPath: "textColor")
}

答案 10 :(得分:1)

Swift 4

override func layoutSubviews() {
    super.layoutSubviews()

    datePickerView.setValue(UIColor.white, forKeyPath: "textColor")
}

答案 11 :(得分:0)

您可以使用扩展来获取和设置textColor,如下面的

extension UIDatePicker {

    var textColor: UIColor? {
        set {
            setValue(newValue, forKeyPath: "textColor")
        }
        get {
            return value(forKeyPath: "textColor") as? UIColor
        }
    }

}

然后设置颜色:

datePicker.textColor = .red

答案 12 :(得分:0)

我在XCode 11上使用最新的SwiftUI / Swift 5遇到了类似的问题。以上所有选项均不起作用,并且DatePicker保持黑色文本或崩溃。

在您的SwiftUI文件中,在var body之前设置init()

init() {
    UIDatePicker.appearance().backgroundColor = .clear
}

然后在您的var body视图中执行此操作

DatePicker(selection: $dob, in: ...Date(), displayedComponents: .date) {
   Text("Select Date")
}.colorInvert()

使用iOS Dark Theme将黑色文本反转为白色。看起来/工作很棒。希望这会有所帮助。

答案 13 :(得分:0)

在Xcode 11.5(iOS 13)中,通过如下设置情节提要中的日期选择器颜色来自动设置模式:

背景:systemBackgroundColor 文字:labelColor

结果如下:

enter image description here enter image description here

我发现我还必须在模拟器设置中设置界面样式:

enter image description here