Je ne parviens pas à définir UIDatePicker
font and color . Tout le reste dans mon application était assez simple à ajuster, sauf cela. Est-ce que quelqu'un sait comment faire cela? J'utilise Swift pour iOS8 .
Changer le mode de date en autre chose semble forcer une nouvelle rédaction avec la couleur de texte récemment définie.
datePicker.setValue(UIColor.whiteColor(), forKeyPath: "textColor")
datePicker.datePickerMode = .CountDownTimer
datePicker.datePickerMode = .DateAndTime //or whatever your original mode was
essaye ça:
/* 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")
Je crois que c'est la solution définitive pour les comptes à rebours.
C'est une extension de la réponse 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()
vous pouvez utiliser
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()
L'API ne fournit pas un moyen de faire cela. Vous pouvez créer vous-même une réplique assez convaincante en utilisant UIPickerView plutôt qu'en utilisant UIDatePicker. Se ici
Je voulais faire cela, mais le régler pour quand quelqu'un a la date fixée avant maintenant, ou après maintenant. J'ai dû recharger les données, mais lorsque je l'ai fait, cela a fini par le régler sur le DateTime en cours lorsque vous utilisez l'exemple ci-dessus.
Donc, ce que j'ai fait était de définir une valeur temporaire, puis de la définir après le rechargement. Cela fait un effet animé, mais ça fonctionne. Si vous connaissez un meilleur moyen, faites le moi savoir ...
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()
}
}
Vous pouvez définir la valeur à l'aide de forKeyPath: "textColor". Le code:
datePicker.setValue(UIColor.whiteColor(), forKeyPath: "textColor")
où datePicker est votre objet UIDatePicker et le premier paramètre est la couleur souhaitée
J'ai vu le problème que vous aviez et avait un problème similaire. En utilisant Xcode 6.3.1, j'ai utilisé ce code dans le mien et j'ai bien travaillé:
myPicker.backgroundColor = UIColor.whiteColor()
Au cas où cela aiderait.
Swift 4
override func layoutSubviews() {
super.layoutSubviews()
datePickerView.setValue(UIColor.white, forKeyPath: "textColor")
}
Vous pouvez utiliser des extensions pour obtenir et définir textColor comme ci-dessous
extension UIDatePicker {
var textColor: UIColor? {
set {
setValue(newValue, forKeyPath: "textColor")
}
get {
return value(forKeyPath: "textColor") as? UIColor
}
}
}
Et puis définissez la couleur:
datePicker.textColor = .red