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

我试图设置UIDatePicker 字体颜色时遇到了麻烦。 除此之外,我的应用程序中的其他一切都相当简单。 有人知道怎么做这个吗? 我正在使用Swift for iOS8

截图

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

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

你只需要在viewdidLoad / viewWillAppear viewdidLoad设置2行代码就可以使用DatePicker。

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

看到像这样的结果:

在这里输入图像说明

尝试这个:

  /* 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") 

我相信这是倒数计时器的最终解决scheme。
这是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() 

API不提供这样做的方法。 您可以使用UIPickerView而不是使用UIDatePicker来制作一个相当有说服力的副本。 在这里

我想这样做,但设置为有人有现在之前或之后的date设置。 我不得不重新加载数据,但是当我使用上面的例子的时候,最终把它设置为当前date时间。

所以我所做的就是设置一个临时值,然后在重装之后进行设置。 它确实使它具有animation效果,但它起作用。 如果你知道更好的方法,让我知道…

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

您可以使用

 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() 

将textColor和highlightsToday添加到用户定义的variables对我来说是个窍门:

IB截图

我看到你遇到的问题,并有类似的问题。 使用Xcode 6.3.1我在我的这个代码中使用了很好的工作:

 myPicker.backgroundColor = UIColor.whiteColor() 

如果这有帮助。

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

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

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

你可以使用扩展来获取和设置textColor像波纹pipe

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

然后设置颜色:

 datePicker.textColor = .red