web-dev-qa-db-fra.com

Définir la couleur et la police du texte pour UIDatePicker dans iOS8/Swift

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 .

screenshot

20
Fenda

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
26
Dylan Reich

il vous suffit de définir 2 lignes de code dans viewdidLoad/viewWillAppear selon l'endroit où vous utilisez DatePicker.

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

Voir le résultat comme ceci:

 enter image description here

9
Pravin Kamble

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

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

L'ajout de textColor et de mises en surbrillanceAujourd'hui aux variables définies par l'utilisateur m'a été utile:

 IB screenshot

2
CedricSoubrie

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

2
David Karlsson

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

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

1
lborgav

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.

1
ChallengerGuy

Swift 4

override func layoutSubviews() {
    super.layoutSubviews()

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

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
0
Omar Albeik