UIDatePicker更改“今天”日期的文本颜色

时间:2015-10-28 09:51:57

标签: ios xcode uidatepicker

我知道这个问题已经出现了,但是使用xCode 7和iOS9.2可以在UIDatePicker上更改“今天”日期的字体颜色吗?

[self.dpData setValue:[UIColor colorWithRed:111/255.0f green:113/255.0f blue:121/255.0f alpha:1.0f] forKeyPath:@"setHighlightsToday"];

我试过这个并且它崩溃了,所以我知道这不起作用。

我有其他任何选项,或者我真的需要构建自己的DatePicker?

提前致谢。

5 个答案:

答案 0 :(得分:7)

更安全/更简单的方法是简单地设置键的值" highlightToday"。这是一个Swift 2.2示例:

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

答案 1 :(得分:4)

到目前为止,我使用了相同的Richardo方法,但是它使用的私有api总是不可用,或者Apple可能会拒绝它。 我刚刚更改了我的代码(就像它的hacky和丑陋)只是将日期选择器更改为另一种模式并返回 - 这会导致Today颜色获得之前设置的textColor。

selectedColor = [UIColor whiteColor];
[self.TimerPicker setValue:selectedColor forKeyPath:@"textColor"];
[self.TimerPicker setDatePickerMode:UIDatePickerModeDate];
[self.TimerPicker setDatePickerMode:UIDatePickerModeDateAndTime];

对我来说足够好了。

答案 2 :(得分:1)

通过更多搜索我找到了解决方案。

[_dpData setValue:[UIColor colorWithRed:111/255.0f green:113/255.0f blue:121/255.0f alpha:1.0f] forKeyPath:@"textColor"];
SEL selector = NSSelectorFromString( @"setHighlightsToday:" );
NSInvocation *invocation = [NSInvocation invocationWithMethodSignature :
                            [UIDatePicker
                             instanceMethodSignatureForSelector:selector]];
BOOL no = NO;
[invocation setSelector:selector];
[invocation setArgument:&no atIndex:2];
[invocation invokeWithTarget:_dpData];

使用此解决方案,我们可以毫无问题地更改文本的颜色(即使是今天的日期)。

答案 3 :(得分:1)

即使对于 iOS 13.4 或 14,实际给出的答案仍然是实际的。崩溃的原因是您只能为经典(轮子)样式的日期选择器设置这些参数:

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

默认日期选择器具有自动样式: enter image description here

因此,如果设备安装了 iOS 13.4 或更高版本,它将使用 Compact 样式。但较旧的 iOS 版本将使用 Wheels 样式。

因此,要解决 iOS 13.4 或更高版本的问题,您应该添加基于 UIDatePickerStyle 的条件(从 13.4 开始可用)。像这样:

if #available(iOS 13.4, *) {
            let style = self.startDatePicker.datePickerStyle
            if style == .wheels {
                self.startDatePicker.setValue(UIColor.red, forKey: "textColor")
                self.startDatePicker.setValue(false, forKey: "highlightsToday")
            }
        } else {
            self.startDatePicker.setValue(UIColor.red, forKey: "textColor")
            self.startDatePicker.setValue(false, forKey: "highlightsToday")
        }

另一种方法是使用经典日期选择器样式 - 通过在 StoryBoard 构建器中明确设置其样式:

enter image description here

答案 4 :(得分:0)

仔细阅读本课程的文档以及它的父类,它说它仍然不可能

https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIDatePicker_Class/index.html#//apple_ref/doc/uid/TP40006806

是的,你应该自己做,因为有了物品选择器,它是可能的。

这对于Apple来说真的很愚蠢