我一直无法设置UIDatePicker
字体和颜色。我的应用程序中的其他所有内容都非常简单,除此之外。有人知道怎么做这个吗?我正在使用 Swift 来 iOS8 。
答案 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")
查看结果如下:
答案 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)
答案 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)