Mil*_*ilo 34 fonts colors objective-c uidatepicker ios
我想要做的就是更改UIDatePicker的字体颜色.我研究了其他问题,但他们都涉及改变其他属性和定制整个外观.我想要做的只是将字体颜色从黑色更改为白色.我发现很难相信我不能做这么看似简单的任务.为什么淡色会影响它呢?它甚至做了什么吗?
waf*_*les 75
所有我需要的(在iOS 8.x和9.0上)是这一行改变字体颜色:
[my_date_picker setValue:[UIColor whiteColor] forKey:@"textColor"];
Run Code Online (Sandbox Code Playgroud)
没有子类或私有API的调用......
注意:今天的当前日期仍会突出显示(在较新的iOS版本中).您可以使用以下代码解决此问题:
if ([my_date_picker respondsToSelector:sel_registerName("setHighlightsToday:")]) {
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wundeclared-selector"
[my_date_picker performSelector:@selector(setHighlightsToday:) withObject:[NSNumber numberWithBool:NO]];
#pragma clang diagnostic pop
}
Run Code Online (Sandbox Code Playgroud)
DCD*_*CDC 23
从Swift 2.1开始:
picker.setValue(UIColor.whiteColor(), forKey: "textColor")
picker.sendAction("setHighlightsToday:", to: nil, forEvent: nil)
let date = NSDate()
picker.setDate(date, animated: false)
Run Code Online (Sandbox Code Playgroud)
而不是"今天",你会看到当天,
Jos*_*uez 18
下一个解决方案来自"arturgrigor",它在我的应用程序中运行良好,只需复制它,将其粘贴到viewDidLoad方法中,然后享受它:
[my_datePicker setValue:[UIColor whiteColor] 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:my_datePicker];
Run Code Online (Sandbox Code Playgroud)
Tol*_*ldy 18
@Jeremiah答案的另一个替代方法是在Interface Builder中定义这些值.我更喜欢这个,因为在ViewController中没有要添加的代码.
单击"DatePicker"视图,然后从"属性"检查器中对其进行自定义,如屏幕截图所示.

适用于Swift 2,3,4,可能适用于Swift <2.(未经测试)
根据Apple的UIKit用户界面目录,开发人员不允许自定义日期选择器.
我已经看到其他类似问题的StackOverflow答案,建议使用UIPickerView制作假UIDatePicker并自定义它.
我还在GitHub上找到了一个开源日期选择器(在https://github.com/mwermuth/MWDatePicker上)可能会有所帮助.它允许不同的背景和选择器样式,但不是不同的字体或字体属性....
要更改UIDatePicker文本颜色,请使用:
// MARK: - Helping content
private enum DatePickerProperties: String {
case TextColor = "textColor"
case HighlightsToday = "highlightsToday"
}
// MARK: - Outlets
@IBOutlet private weak var datePicker: UIDatePicker!
// MARK: - Lifecicle
public override func awakeFromNib() {
super.awakeFromNib()
self.datePicker.setValue(UIColor.whiteColor(), forKey: DatePickerProperties.TextColor.rawValue)
self.datePicker.setValue(false, forKey: DatePickerProperties.HighlightsToday.rawValue)
}
Run Code Online (Sandbox Code Playgroud)
它就像xCode 7.3和Swift 2.3的魅力一样.
我偶然发现了一个令人惊讶的干净解决方案,使用UIAppearance,而不使用任何 KVC、swizzling 或其他私有 API。我发现尝试为a 中的任何内容设置过textColor孔都没有影响,但是简单地调用常规设置器的自定义外观属性就可以正常工作。UIAppearanceUILabelUIDatePickertextColor
// Implement a custom appearance property via a UILabel category
@interface UILabel (PickerLabelTextColor)
@property (nonatomic, strong) UIColor * textColorWorkaround UI_APPEARANCE_SELECTOR;
@end
@implementation UILabel (PickerLabelTextColor)
- (UIColor *)textColorWorkaround {
return self.textColor;
}
- (void)setTextColorWorkaround:(UIColor *)textColor {
self.textColor = textColor;
}
@end
Run Code Online (Sandbox Code Playgroud)
然后使用如下:
UILabel *pickerLabelProxy = [UILabel appearanceWhenContainedInInstancesOfClasses:@[UIDatePicker.class]];
pickerLabelProxy.textColorWorkaround = UIColor.lightGrayColor;
Run Code Online (Sandbox Code Playgroud)
UI标签扩展:
extension UILabel {
@objc dynamic var textColorWorkaround: UIColor? {
get {
return textColor
}
set {
textColor = newValue
}
}
}
Run Code Online (Sandbox Code Playgroud)
外观代理使用:
let pickerLabelProxy = UILabel.appearance(whenContainedInInstancesOf: [UIDatePicker.self])
pickerLabelProxy.textColorWorkaround = UIColor.lightGray
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
37135 次 |
| 最近记录: |