2015-02-09 14 views
18

Ich habe versucht, Probleme wurden mit der UIDatePickerSchrift und Farbe einzustellen. Alles andere in meiner App war ziemlich einfach anzupassen, außer dies. Weiß jemand, wie man das macht? Ich benutze Swift für iOS8.Set Textfarbe und Schriftart für UIDatePicker in iOS8/Swift

screenshot

+0

möglich Duplikat von - http://stackoverflow.com/questions/10844675/custom-ios-uidatepicker-using-uiappearance –

+0

Haben Sie am Ende eine Lösung gefunden? – denislexic

+0

@denislexic Nein, noch nicht. – Fenda

Antwort

2

Die API bietet keine Möglichkeit, dies zu tun. Sie können mit UIPickerView ein ziemlich überzeugendes Replikat erstellen, anstatt UIDatePicker zu verwenden. Se here

1

Ich sah das Problem, das Sie hatten und hatte ein ähnliches Problem. Mit Xcode 6.3.1 habe ich diesen Code in meinem verwendet und hat super funktioniert:

myPicker.backgroundColor = UIColor.whiteColor() 

Falls das hilft.

+0

Dies ändert die Hintergrundfarbe des Pickers selbst, nicht die Schriftart der Schriftfarbe. Persönlich denke ich, dass es dieses Typendesign schrecklich aussehen lässt. – Michael

+0

Das ist, was ich brauchte Mann. Aber leider war deine Post so weit hier unten, dass ich sie woanders finden musste. Hoffentlich mehr Leute sehen es früher – Markinson

1

Sie können den Wert mit forKeyPath: "textColor" festlegen. Der Code:

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

wo picker ist Ihr UIDatePicker Objekt, und der erste Parameter ist die Farbe, die Sie mögen scheinen

+0

das ändert alle Einträge mit Ausnahme des aktuellen Datums ... – Greg

23

Datumsänderung Modus, um etwas anderes eine erneute Unentschieden mit dem neu eingestellten Text zu erzwingen Farbe.

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

Das hat den Trick. Danke vielmals. – Aeradriel

+10

Was ist mit Schrift? –

+2

Ich kann nicht glauben, dass wir etwas mit 'setValue forKeypath' hacken müssen. Es ist nicht so, dass wir versuchen, die Datumswerte durch Emojis oder etwas Zufälliges zu ersetzen. – villy393

4

try this:

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

Ich wollte, dies zu tun, sondern setzte es für, wenn jemand nun das Datum vor hat, oder nach jetzt. Ich musste die Daten neu laden, aber als ich es tat, stellte es sich auf die aktuelle DateTime ein, wenn ich das obige Beispiel verwendete.

Also was ich getan habe war einen temporären Wert eingestellt und dann nach dem Neuladen gesetzt. Es macht zwar einen animierten Effekt, aber es funktioniert. Wenn Sie eine bessere Art und Weise kennen, lassen Sie mich wissen ...

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

Ich sollte beachten, dass ich die hier gefundenen Vergleichserweiterungen verwende: http://stackoverflow.com/questions/26198526/nsdate-comparison-using-swift – Alsop

2

Sie

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

Siehe meine andere Antwort für erweiterte Lösung. – ObjectiveTC

4

verwenden kann ich glauben, dass dies die endgültige Lösung für die Countdown-Timer ist.
Es ist eine Erweiterung von Yildirimosmans Antwort.

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

Hinzufügen von Textfarbe und highlightsToday zu benutzerdefinierten Variablen hat den Trick für mich:

IB screenshot

7

Sie brauchen nur zwei Zeilen Code setzen in viewdidLoad/viewWillAppear accoding wo Sie Datepicker verwenden.

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

Sehen Sie das Ergebnis wie folgt aus:

enter image description here

+2

DIESES FUNKTIONIERT! sogar auf Swift 3 auf Xcode 8.x – ProteanDev

0

können Sie Erweiterungen verwenden, um Textfarbe zu erhalten und setzen wie unten

extension UIDatePicker { 

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

} 

und dann die Farbe:

datePicker.textColor = .red 
Verwandte Themen