我一直在设置UIDatePicker
字体和颜色时遇到麻烦。我的应用程序中的其他所有内容都非常简单,除此之外。有人知道怎么做这个吗?我正在使用Swift for iOS8。
将日期模式更改为其他内容似乎强制使用新设置的文本颜色重新绘制。
datePicker.setValue(UIColor.whiteColor(), forKeyPath: "textColor")
datePicker.datePickerMode = .CountDownTimer
datePicker.datePickerMode = .DateAndTime //or whatever your original mode was
改变UIDatePicker View字体(直到现在)的唯一方法是调整:
你可以通过UILabel的扩展来改变字体! (这不推荐,但它有效!)
datePicker.setValue(UIColor.whiteColor(), forKeyPath: "textColor")
并且要更改颜色,您只需调用以下函数:
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()
}
}
如果需要重新渲染,您需要致电:
import Foundation
import UIKit
public extension UILabel {
@objc func setFontSwizzled(font: UIFont) {
if self.shouldOverride() {
self.setFontSwizzled(font: UIFont.fontWith(style: .regular, size: 14))
} else {
self.setFontSwizzled(font: font)
}
}
private func shouldOverride() -> Bool {
let classes = ["UIDatePicker", "UIDatePickerWeekMonthDayView", "UIDatePickerContentView"]
var view = self.superview
while view != nil {
let className = NSStringFromClass(type(of: view!))
if classes.contains(className) {
return true
}
view = view!.superview
}
return false
}
private static let swizzledSetFontImplementation: Void = {
let instance: UILabel = UILabel()
let aClass: AnyClass! = object_getClass(instance)
let originalMethod = class_getInstanceMethod(aClass, #selector(setter: font))
let swizzledMethod = class_getInstanceMethod(aClass, #selector(setFontSwizzled))
if let originalMethod = originalMethod, let swizzledMethod = swizzledMethod {
// switch implementation..
method_exchangeImplementations(originalMethod, swizzledMethod)
}
}()
static func swizzleSetFont() {
_ = self.swizzledSetFontImplementation
}
}
我看到了你遇到的问题并遇到了类似的问题。使用Xcode 6.3.1我在我的代码中使用了这个代码,效果很好:
datePicker.setValue(UIColor.whiteColor(), forKeyPath: "textColor")
如果这有帮助。
斯威夫特4
datePicker.datePickerMode = .CountDownTimer
datePicker.datePickerMode = .DateAndTime //or whatever your original mode was
您可以使用扩展来获取和设置textColor,如下所示
myPicker.backgroundColor = UIColor.whiteColor()
然后设置颜色:
override func layoutSubviews() {
super.layoutSubviews()
datePickerView.setValue(UIColor.white, forKeyPath: "textColor")
}
你需要在qazxsw poi / qazxsw poi中设置2行代码,你使用的是DatePicker。
viewdidLoad
看到这样的结果:
viewWillAppear
试试这个:
dobDatePicker.setValue(UIColor.whiteColor(), forKeyPath: "textColor")
dobDatePicker.setValue(false, forKey: "highlightsToday")
我相信这是倒计时器的最终解决方案。 这是yildirimosman答案的扩展。
/* 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")
添加文本颜色和高亮显示今天用户定义的变量对我有用:
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()
API没有提供执行此操作的方法。您可以使用UIPickerView而不是使用UIDatePicker自己创建一个非常令人信服的副本。 Se //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()
我想这样做,但是当有人在现在之前或之后设定日期时设定它。我不得不重新加载数据,但是当我使用上面的例子时,它最终将其设置为当前的DateTime。
所以我所做的是设置一个临时值,然后在重新加载后设置它。它确实使它做了一个动画效果,但它的工作原理。如果你知道更好的方法,请告诉我......
here