example - Establezca el color del texto y la fuente para UIDatePicker en iOS8/Swift
uidatepicker swift 4 example (12)
He tenido problemas para configurar la fuente y el color de UIDatePicker
. Todo lo demás en mi aplicación fue bastante sencillo de ajustar excepto esto. ¿Alguien sabe cómo hacer esto? Estoy usando Swift para iOS8 .
Cambiar el modo de fecha a otra cosa parece forzar un nuevo dibujo con el nuevo color de texto establecido.
datePicker.setValue(UIColor.whiteColor(), forKeyPath: "textColor")
datePicker.datePickerMode = .CountDownTimer
datePicker.datePickerMode = .DateAndTime //or whatever your original mode was
Creo que esta es la solución definitiva para los temporizadores de cuenta atrás.
Es una expansión de la respuesta de 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()
La API no proporciona una manera de hacer esto. Puedes hacer una réplica bastante convincente utilizando un UIPickerView en lugar de usar UIDatePicker. Esta here
Puede establecer el valor utilizando forKeyPath: "textColor". El código:
datePicker.setValue(UIColor.whiteColor(), forKeyPath: "textColor")
donde datePicker es su objeto UIDatePicker, y el primer parámetro es el color que desea
Puedes usar extensiones para obtener y establecer textColor como abajo
extension UIDatePicker {
var textColor: UIColor? {
set {
setValue(newValue, forKeyPath: "textColor")
}
get {
return value(forKeyPath: "textColor") as? UIColor
}
}
}
Y luego establecer el color:
datePicker.textColor = .red
Quería hacer esto, pero configurarlo para cuando alguien tenga la fecha establecida antes o ahora. Tuve que volver a cargar los datos, pero cuando lo hice, terminé configurándolo en el DateTime actual al usar el ejemplo anterior.
Entonces, lo que hice fue establecer un valor temporal y luego configurarlo después de la recarga. Lo hace hacer un efecto animado, pero funciona. Si conoces una mejor manera, házmelo saber ...
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()
}
}
Swift 4
override func layoutSubviews() {
super.layoutSubviews()
datePickerView.setValue(UIColor.white, forKeyPath: "textColor")
}
Vi el problema que tenías y tenía un problema similar. Usando Xcode 6.3.1 utilicé este código en el mío y funcionó muy bien:
myPicker.backgroundColor = UIColor.whiteColor()
En caso de que esto ayude.
prueba esto:
/* 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")
puedes usar
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()