acaba de descargar mi copia de xcode 5 y me preguntaba si alguien sabe como puedo cambiar el color o el tamaño de la fuente en el selector de fecha?

InformationsquelleAutor Jared Gross | 2013-09-15

12 Comentarios

  1. -8
    - (UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *)view{
    
    UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, pickerView.frame.size.width, 44)];
    label.backgroundColor = [UIColor grayColor];
    label.textColor = [UIColor whiteColor];
    label.font = [UIFont fontWithName:@"HelveticaNeue-Bold" size:18];
    label.text = [NSString stringWithFormat:@" %d", row+1];
    return label;    
    }
    
    //number Of Components
    - (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView{
    return 1;
    }
    
    //number Of Rows In Component
    - (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:   (NSInteger)component{
    return 6;
    }
    
    • Por favor, añadir un poco de explicación para ir junto con el código de tu respuesta.
    • -1 Porque el código no contiene ninguna explicación. Se supone que vamos a crear una subclase de UIDatePicker o algo?
    • este código no está recibiendo la llamada cuando yo uso para mi datepicker… Esto solo funciona para UIPicker y no con UIDatePicker
    • Esto funcionó para UIPicker bien, la explicación sería bueno aunque.
    • esto es para PickerView..no para DatePicker
  2. 59

    Necesito similar para mi aplicación y terminaron pasando el largo camino de ronda. Es una verdadera lástima que no hay una manera más fácil de simplemente cambiar a un texto blanco versión de UIDatePicker.

    El código siguiente se utiliza una categoría en UILabel para forzar el texto de la etiqueta de color blanco cuando el setTextColor: se envía el mensaje a la etiqueta. Con el fin de no hacer esto para cada etiqueta en la aplicación he filtrado sólo se aplican si se trata de una subvista de un UIDatePicker clase. Por último, algunas de las etiquetas tienen sus colores de set antes de que se añadan a sus superviews. Para la captura de estos el código reemplaza el willMoveToSuperview: método.

    Que probablemente sería mejor dividir la siguiente en más de una categoría, sino que lo he añadido a todos aquí para la facilidad de publicación.

    #import "UILabel+WhiteUIDatePickerLabels.h"
    #import <objc/runtime.h>
    
    @implementation UILabel (WhiteUIDatePickerLabels)
    
    + (void)load {
        static dispatch_once_t onceToken;
        dispatch_once(&onceToken, ^{
            [self swizzleInstanceSelector:@selector(setTextColor:)
                          withNewSelector:@selector(swizzledSetTextColor:)];
            [self swizzleInstanceSelector:@selector(willMoveToSuperview:)
                          withNewSelector:@selector(swizzledWillMoveToSuperview:)];
        });
    }
    
    //Forces the text colour of the label to be white only for UIDatePicker and its components
    -(void) swizzledSetTextColor:(UIColor *)textColor {
        if([self view:self hasSuperviewOfClass:[UIDatePicker class]] ||
           [self view:self hasSuperviewOfClass:NSClassFromString(@"UIDatePickerWeekMonthDayView")] ||
           [self view:self hasSuperviewOfClass:NSClassFromString(@"UIDatePickerContentView")]){
            [self swizzledSetTextColor:[UIColor whiteColor]];
        } else {
            //Carry on with the default
            [self swizzledSetTextColor:textColor];
        }
    }
    
    //Some of the UILabels haven't been added to a superview yet so listen for when they do.
    - (void) swizzledWillMoveToSuperview:(UIView *)newSuperview {
        [self swizzledSetTextColor:self.textColor];
        [self swizzledWillMoveToSuperview:newSuperview];
    }
    
    //-- helpers --
    - (BOOL) view:(UIView *) view hasSuperviewOfClass:(Class) class {
        if(view.superview){
            if ([view.superview isKindOfClass:class]){
                return true;
            }
            return [self view:view.superview hasSuperviewOfClass:class];
        }
        return false;
    }
    
    + (void) swizzleInstanceSelector:(SEL)originalSelector
                     withNewSelector:(SEL)newSelector
    {
        Method originalMethod = class_getInstanceMethod(self, originalSelector);
        Method newMethod = class_getInstanceMethod(self, newSelector);
    
        BOOL methodAdded = class_addMethod([self class],
                                           originalSelector,
                                           method_getImplementation(newMethod),
                                           method_getTypeEncoding(newMethod));
    
        if (methodAdded) {
            class_replaceMethod([self class],
                                newSelector,
                                method_getImplementation(originalMethod),
                                method_getTypeEncoding(originalMethod));
        } else {
            method_exchangeImplementations(originalMethod, newMethod);
        }
    }
    
    @end
    
    • Esta solución es mejor que la de «rolling su propia» solución, porque se mantiene la configuración regional.
    • Genial, gracias por esto.
    • +1 por el uso de swizzling. Supongo que técnicamente esto no es el uso de cualquier Api, incluso.
    • Realmente agradable. Trabajó mucho y se apresuró a añadir. No hay forma que yo nunca he tenido el tiempo para dedicar a la figuración de salir de mí mismo. Gracias! Se debe obtener la marca de verificación.
    • será esta la solución pase App Store de moderación? ¿alguien ha probado?
    • Vaya que es hermosa, código de…
    • Gracias por hacer el trabajo de averiguarlo. la captura con willMoveToSuperview es realmente agradable. También he añadido swizzle métodos para cambiar la fuente y en el caso de las etiquetas así.
    • ¿La intención de swizzle el selector de willMoveToSuperview:: (con dos signos de dos puntos)?
    • Además creo que en swizzledWillMoveToSuperview: usted debe llamar a setTextColor: por lo que llama a su método personalizado? Actualmente llamando swizzledSetTextColor: de llamar a las acciones de implementación. — Yo trato de averiguar lo que debe hacer para obtener el «horas» y «min» etiquetas en blanco cuando yo uso una cuenta atrás UIDatePicker…
    • Finalmente comprendí el truco para activar el negro «horas» y «min» de la etiqueta (de cuenta regresiva modo) blanco. Estas etiquetas son sólo «hay», setTextColor: nunca es llamado en estos. Así que cuando me cree el datePicker me atraviesan de forma recursiva a través de todas las subvistas de UIDatePicker y llame a view.textColor = view.textColor; en todos los puntos de vista que donde subclases de UILabels.
    • Resulta que una vez que las «horas» cambios de etiqueta de texto es negro de nuevo. Así que usted tiene que llamar a que recursiva textColor establecer una cosita en el valor cambiado acción de nuevo.
    • será esta la solución pase App Store de moderación? ¿alguien ha probado?
    • Pasó bien para mí

  3. 41

    Esta es la forma más sencilla y funciona! Te Lo Prometo. Crear el UIDatePicker en la vista, o conectarlo a través de un guión, a continuación, coloque el código siguiente en el método ViewDidLoad. Reemplazar «datepicker» en la primera línea con cualquiera que sea el nombre del selector de fecha.

    Objective-C:

    //Set Color of Date Picker
    self.datePicker.datePickerMode = UIDatePickerModeDate;
    [self.datePicker setValue:[UIColor colorWithRed:70/255.0f green:161/255.0f blue:174/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:self.datePicker];
    
    • He grabado un montón de tiempo en esto, y este es el único que ha trabajado para UIDatePicker instancias.
    • ¿Cómo se puede cambiar la fuente en UIDatePicker ?
    • parece NSInvocation se ha ido en swift : https://developer.apple.com/swift/blog/?id=19 por lo tanto, no es de la compilación.
    • En iOS 7 para mí, sólo el año de color se cambia…
    • En Swift datePicker.setValue(UIColor.whiteColor(), forKey: "textColor") datePicker.setValue(false, forKey: "highlightsToday")
  4. 28

    «No se puede personalizar la apariencia de los selectores de fecha».

    Ver iOS 7 Recursos de Diseño/UIKit de la Interfaz de Usuario de Catálogo/Selectores de Fecha

    • sí, he leído ya. gracias!
    • Esta debe ser la respuesta correcta.
    • No es cierto. Sólo se utiliza la solución por debajo de Aarón en iOS 7.
    • Esto es falso, pero por desgracia tiene muchos votos y confunde a los desarrolladores. Usted puede cambiar el fondo, simplemente cambiando el color en la propiedad backgroundColor. Como para el textColor se puede hacer muy fácil y agradable con la respuesta @Trianna Brannon dio en este hilo.
    • Esto es una mentira, véase mi respuesta a continuación
    • La Documentación Es una Mentira

  5. 26

    Me fui por delante y se implementó un UIDatePicker reemplazo con UIControl y UIPicker para iOS 7. Que permite editar todo lo que quieras, incluyendo el texto de fuentes y colores.
    La única cosa que yo no podía cambiar es el color de las líneas alrededor de la fila seleccionada.

    Hay cosas que podrían ser más simplificado, y se muestra sólo la fecha, no de tiempo. Esto podría servir como un punto de partida para cualquiera que quiera hacer algo similar.

    puedo cambiar el color de la fuente de la datePicker en iOS7?

    @interface SBDatePicker : UIControl
    
    @property (nonatomic, strong, readwrite) NSDate *minimumDate;
    @property (nonatomic, strong, readwrite) NSDate *maximumDate;
    @property (nonatomic, strong, readwrite) NSDate *date;
    
    - (void)setDate:(NSDate *)date animated:(BOOL)animated;
    
    @end
    

    #import "SBDatePicker.h"
    const NSUInteger NUM_COMPONENTS = 3;
    typedef enum {
    kSBDatePickerInvalid = 0,
    kSBDatePickerYear,
    kSBDatePickerMonth,
    kSBDatePickerDay
    } SBDatePickerComponent;
    @interface SBDatePicker () <UIPickerViewDataSource, UIPickerViewDelegate> {
    SBDatePickerComponent _components[NUM_COMPONENTS];
    }
    @property (nonatomic, strong, readwrite) NSCalendar *calendar;
    @property (nonatomic, weak, readwrite) UIPickerView *picker;
    @property (nonatomic, strong, readwrite) NSDateFormatter *dateFormatter;
    @property (nonatomic, strong, readwrite) NSDateComponents *currentDateComponents;
    @property (nonatomic, strong, readwrite) UIFont *font;
    @end
    @implementation SBDatePicker
    #pragma mark - Life cycle
    - (id)initWithFrame:(CGRect)frame {
    self = [super initWithFrame:frame];
    if (!self) {
    return nil;
    }
    [self commonInit];
    return self;
    }
    - (id)initWithCoder:(NSCoder *)coder {
    self = [super initWithCoder:coder];
    if (!self) {
    return nil;
    }
    [self commonInit];
    return self;
    }
    - (void)commonInit {
    self.tintColor = [UIColor whiteColor];
    self.font = [UIFont systemFontOfSize:23.0f];
    self.calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
    [self setLocale:[NSLocale currentLocale]];
    UIPickerView *picker = [[UIPickerView alloc] initWithFrame:self.bounds];
    picker.autoresizingMask = (UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight);
    picker.dataSource = self;
    picker.delegate = self;
    picker.tintColor = [UIColor whiteColor];
    self.date = [NSDate date];
    [self addSubview:picker];
    self.picker = picker;
    }
    - (CGSize)intrinsicContentSize {
    return CGSizeMake(320.0f, 216.0f);
    }
    #pragma mark - Setup
    - (void)setMinimumDate:(NSDate *)minimumDate {
    _minimumDate = minimumDate;
    [self updateComponents];
    }
    - (void)setMaximumDate:(NSDate *)maximumDate {
    _maximumDate = maximumDate;
    [self updateComponents];
    }
    - (void)setDate:(NSDate *)date {
    [self setDate:date animated:NO];
    }
    - (void)setDate:(NSDate *)date animated:(BOOL)animated {
    self.currentDateComponents = [self.calendar components:(NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit)
    fromDate:date];
    [self.picker reloadAllComponents];
    [self setIndicesAnimated:YES];
    }
    - (NSDate *)date {
    return [self.calendar dateFromComponents:self.currentDateComponents];
    }
    - (void)setLocale:(NSLocale *)locale {
    self.calendar.locale = locale;
    [self updateComponents];
    }
    - (SBDatePickerComponent)componentFromLetter:(NSString *)letter {
    if ([letter isEqualToString:@"y"]) {
    return kSBDatePickerYear;
    }
    else if ([letter isEqualToString:@"m"]) {
    return kSBDatePickerMonth;
    }
    else if ([letter isEqualToString:@"d"]) {
    return kSBDatePickerDay;
    }
    else {
    return kSBDatePickerInvalid;
    }
    }
    - (SBDatePickerComponent)thirdComponentFromFirstComponent:(SBDatePickerComponent)component1
    andSecondComponent:(SBDatePickerComponent)component2 {
    NSMutableIndexSet *set = [NSMutableIndexSet indexSetWithIndexesInRange:NSMakeRange(kSBDatePickerInvalid + 1, NUM_COMPONENTS)];
    [set removeIndex:component1];
    [set removeIndex:component2];
    return (SBDatePickerComponent) [set firstIndex];
    }
    - (void)updateComponents {
    NSString *componentsOrdering = [NSDateFormatter dateFormatFromTemplate:@"yMMMMd" options:0 locale:self.calendar.locale];
    componentsOrdering = [componentsOrdering lowercaseString];
    NSString *firstLetter = [componentsOrdering substringToIndex:1];
    NSString *lastLetter = [componentsOrdering substringFromIndex:(componentsOrdering.length - 1)];
    _components[0] = [self componentFromLetter:firstLetter];
    _components[2] = [self componentFromLetter:lastLetter];
    _components[1] = [self thirdComponentFromFirstComponent:_components[0] andSecondComponent:_components[2]];
    self.dateFormatter = [[NSDateFormatter alloc] init];
    self.dateFormatter.calendar = self.calendar;
    self.dateFormatter.locale = self.calendar.locale;
    [self.picker reloadAllComponents];
    [self setIndicesAnimated:NO];
    }
    - (void)setIndexForComponentIndex:(NSUInteger)componentIndex animated:(BOOL)animated {
    SBDatePickerComponent component = [self componentForIndex:componentIndex];
    NSRange unitRange = [self rangeForComponent:component];
    NSInteger value;
    if (component == kSBDatePickerYear) {
    value = self.currentDateComponents.year;
    }
    else if (component == kSBDatePickerMonth) {
    value = self.currentDateComponents.month;
    }
    else if (component == kSBDatePickerDay) {
    value = self.currentDateComponents.day;
    }
    else {
    assert(NO);
    }
    NSInteger index = (value - unitRange.location);
    NSInteger middleIndex = (INT16_MAX /2) - (INT16_MAX /2) % unitRange.length + index;
    [self.picker selectRow:middleIndex inComponent:componentIndex animated:animated];
    }
    - (void)setIndicesAnimated:(BOOL)animated {
    for (NSUInteger componentIndex = 0; componentIndex < NUM_COMPONENTS; componentIndex++) {
    [self setIndexForComponentIndex:componentIndex animated:animated];
    }
    }
    - (SBDatePickerComponent)componentForIndex:(NSInteger)componentIndex {
    return _components[componentIndex];
    }
    - (NSCalendarUnit)unitForComponent:(SBDatePickerComponent)component {
    if (component == kSBDatePickerYear) {
    return NSYearCalendarUnit;
    }
    else if (component == kSBDatePickerMonth) {
    return NSMonthCalendarUnit;
    }
    else if (component == kSBDatePickerDay) {
    return NSDayCalendarUnit;
    }
    else {
    assert(NO);
    }
    }
    - (NSRange)rangeForComponent:(SBDatePickerComponent)component {
    NSCalendarUnit unit = [self unitForComponent:component];
    return [self.calendar maximumRangeOfUnit:unit];
    }
    #pragma mark - Data source
    - (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView {
    return 3;
    }
    - (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)componentIndex {
    return INT16_MAX;
    }
    #pragma mark - Delegate
    - (CGFloat)pickerView:(UIPickerView *)pickerView widthForComponent:(NSInteger)componentIndex {
    SBDatePickerComponent component = [self componentForIndex:componentIndex];
    if (component == kSBDatePickerYear) {
    CGSize size = [@"0000" sizeWithAttributes:@{NSFontAttributeName : self.font}];
    return size.width + 25.0f;
    }
    else if (component == kSBDatePickerMonth) {
    CGFloat maxWidth = 0.0f;
    for (NSString *monthName in self.dateFormatter.monthSymbols) {
    CGFloat monthWidth = [monthName sizeWithAttributes:@{NSFontAttributeName : self.font}].width;
    maxWidth = MAX(monthWidth, maxWidth);
    }
    return maxWidth + 25.0f;
    }
    else if (component == kSBDatePickerDay) {
    CGSize size = [@"00" sizeWithAttributes:@{NSFontAttributeName : self.font}];
    return size.width + 25.0f;
    }
    else {
    return 0.01f;
    }
    }
    - (NSString *)titleForRow:(NSInteger)row forComponent:(SBDatePickerComponent)component {
    NSRange unitRange = [self rangeForComponent:component];
    NSInteger value = unitRange.location + (row % unitRange.length);
    if (component == kSBDatePickerYear) {
    return [NSString stringWithFormat:@"%li", (long) value];
    }
    else if (component == kSBDatePickerMonth) {
    return [self.dateFormatter.monthSymbols objectAtIndex:(value - 1)];
    }
    else if (component == kSBDatePickerDay) {
    return [NSString stringWithFormat:@"%li", (long) value];
    }
    else {
    return @"";
    }
    }
    - (NSInteger)valueForRow:(NSInteger)row andComponent:(SBDatePickerComponent)component {
    NSRange unitRange = [self rangeForComponent:component];
    return (row % unitRange.length) + unitRange.location;
    }
    - (BOOL)isEnabledRow:(NSInteger)row forComponent:(NSInteger)componentIndex {
    NSDateComponents *dateComponents = [[NSDateComponents alloc] init];
    dateComponents.year = self.currentDateComponents.year;
    dateComponents.month = self.currentDateComponents.month;
    dateComponents.day = self.currentDateComponents.day;
    SBDatePickerComponent component = [self componentForIndex:componentIndex];
    NSInteger value = [self valueForRow:row andComponent:component];
    if (component == kSBDatePickerYear) {
    dateComponents.year = value;
    }
    else if (component == kSBDatePickerMonth) {
    dateComponents.month = value;
    }
    else if (component == kSBDatePickerDay) {
    dateComponents.day = value;
    }
    NSDate *rowDate = [self.calendar dateFromComponents:dateComponents];
    if (self.minimumDate != nil && [self.minimumDate compare:rowDate] == NSOrderedDescending) {
    return NO;
    }
    else if (self.maximumDate != nil && [rowDate compare:self.maximumDate] == NSOrderedDescending) {
    return NO;
    }
    return YES;
    }
    - (UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)componentIndex reusingView:(UIView *)view {
    UILabel *label;
    if ([view isKindOfClass:[UILabel class]]) {
    label = (UILabel *) view;
    }
    else {
    label = [[UILabel alloc] init];
    label.font = self.font;
    }
    SBDatePickerComponent component = [self componentForIndex:componentIndex];
    NSString *title = [self titleForRow:row forComponent:component];
    UIColor *color;
    BOOL enabled = [self isEnabledRow:row forComponent:componentIndex];
    if (enabled) {
    color = [UIColor whiteColor];
    }
    else {
    color = [UIColor colorWithWhite:0.0f alpha:0.5f];
    }
    NSAttributedString *attributedTitle = [[NSAttributedString alloc] initWithString:title
    attributes:@{NSForegroundColorAttributeName: color}];
    label.attributedText = attributedTitle;
    if (component == kSBDatePickerMonth) {
    label.textAlignment = NSTextAlignmentLeft;
    }
    else {
    label.textAlignment = NSTextAlignmentRight;
    }
    return label;
    }
    - (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)componentIndex {
    SBDatePickerComponent component = [self componentForIndex:componentIndex];
    NSInteger value = [self valueForRow:row andComponent:component];
    if (component == kSBDatePickerYear) {
    self.currentDateComponents.year = value;
    }
    else if (component == kSBDatePickerMonth) {
    self.currentDateComponents.month = value;
    }
    else if (component == kSBDatePickerDay) {
    self.currentDateComponents.day = value;
    }
    else {
    assert(NO);
    }
    [self setIndexForComponentIndex:componentIndex animated:NO];
    NSDate *datePicked = self.date;
    if (self.minimumDate != nil && [datePicked compare:self.minimumDate] == NSOrderedAscending) {
    [self setDate:self.minimumDate animated:YES];
    }
    else if (self.maximumDate != nil && [datePicked compare:self.maximumDate] == NSOrderedDescending) {
    [self setDate:self.maximumDate animated:YES];
    }
    else {
    [self.picker reloadAllComponents];
    }
    [self sendActionsForControlEvents:UIControlEventValueChanged];
    }
    @end
    
    • ¿Tienes el #import «NSMutableAttributedString+Append.h» código así?
    • Oh, eso es sólo una categoría simple que uso para crear atrributed cadenas. No es necesario aquí. Voy a quitar lo de la fuente.
    • Sin ella, no se parece a la obra! La llamada a [attributedTitle appendString:título withColor:color]; un poco de ayuda sería apreciada.
    • Ok, olvídalo…he descubierto con algunos cambios mínimos. Gracias funciona.
    • Ooh. Manual de referencia de contar. De lujo 😉 muchas Gracias!
    • Cómo se acerca la fecha de validación, como la de febrero sólo tiene 28 días?
    • Dónde está lo que falta?
    • appendString:título withColor:color]; yo no lo consigue
    • Que fue de mi internos de la categoría. Me acaban de quitar porque no era necesaria en este trozo de código.
    • He utilizado NSAttributedString *attString = [[NSAttributedString alloc] initWithString:[NSString stringWithFormat:@»%@»,título] atributos:@{NSForegroundColorAttributeName:[UIColor whiteColor]}]; pero muestra solo componente meses
    • se me da este resultado… oi57.tinypic.com/mjnzts.jpg
    • La cantidad de código necesario para hacer esto es a la vez impresionante y aterradora. 🙂
    • El código se bloquea cuando el japonés se establece la configuración regional. – (void)updateComponents no se puede analizar esta cadena: y年M月d日.

  6. 10

    Estoy luchando con esto, el texto negro sobre un fondo negro. 🙂
    No he encontrado la manera de cambiar el color del texto todavía.
    Sin embargo, puede jugar con el color de fondo:

    picker.backgroundColor = [UIColor whiteColor];
    

    Otro hack me encontré con que se trabajó es dar a cada UIView en el selector de fechas (cada número tiene su propia UIView, (sí, lo sé)

    [UIView appearanceWhenContainedIn:[UITableView class], [UIDatePicker class], nil].backgroundColor = [UIColor colorWithWhite:1 alpha:0.5]
    

    (No recomiendo usar esta opción, ya que se produce un molesto efecto de parpadeo durante la rotación.)

    Espero que esto ayude. 🙂

  7. 10

    En viewDidLoad,

    datePicker.setValue(UIColor.yellowColor(), forKey: "textColor")
    datePicker.performSelector("setHighlightsToday:", withObject:UIColor.yellowColor())
    

    De trabajo para iOS 9

    • Uno trabaja, fondo uno no Xcode 7.3.1, iOS 9.3
    • Inferior lanza la excepción.
  8. 6

    Un poco chapucero, pero, de nuevo, por lo que son todos los de las otras soluciones. Esto funcionó para mí: subclase UIDatePicker y cambiar el valor de la textColor atributo antes de agregar cualquier vistas a ella.

    Para cambiar sólo el color:

    class ColoredDatePicker: UIDatePicker {
    var changed = false
    override func addSubview(view: UIView) {
    if !changed {
    changed = true
    self.setValue(yourColor, forKey: "textColor")
    }
    super.addSubview(view)
    }
    }
    

    A cambiar de color y otros atributos:

    Voy a actualizar si me figura esto.

    Hago notar que el color no está representado exactamente como el color del objeto dictaría, pero jugar con él y llegar a ser el color que desee.

    • Todo lo que quería era una de color blanco y esta a mi me funciono perfectamente. Gracias!
  9. 4

    He contestado una pregunta similar aquí: UIPickerView Fuentes Personalizadas iOS7 Básicamente, usted tiene que cortar la viewForRow: método y ahora solo tengo que trabajar para UIPickerView no UIDatePickers. (trabajando en ello…)

    -(UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *)view
    

    Y aquí es cómo usted para un UIPickerView para mostrar atribuido de texto (fuentes personalizadas, colores, etc…)

    -(UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *)view
    {
    //create attributed string
    NSString *yourString;  //can also use array[row] to get string
    NSDictionary *attributeDict = @{NSForegroundColorAttributeName : [UIColor whiteColor]};
    NSAttributedString *attributedString = [[NSAttributedString alloc] initWithString:yourString attributes:attributeDict];
    //add the string to a label's attributedText property
    UILabel *labelView = [[UILabel alloc] init];
    labelView.attributedText = attributedString;
    //return the label
    return labelView;
    

    }

    Espero que esto te ayuda… voy a editar mi respuesta tan pronto como averiguar el Selector de Fecha!

    • Cualquier progreso en este, sin embargo?
  10. 2

    En swift puede añadir estas dos líneas a su viewDidLoad:

        datePicker.setValue(DesignHelper.getOffWhiteColor(), forKey: "textColor")
    datePicker.performSelector("setHighlightsToday:", withObject: UIColor.whiteColor())
    
    • Cuando hice el DesignHelper vienen?
    • Uy, ignorar eso. Es una clase personalizada que devuelve un UIColor
    • He probado con UIColor.redColor (), pero no está funcionando
  11. 2

    Esto funciona en iOS 9

    [datePicker setValue:[UIColor whiteColor] forKey:@"textColor"];
    
    • es que no trabajan directamente.. es de trabajo una vez que desplazar el selector de
  12. 0

    Me topé con un sorprendentemente limpio solución utilizando UIAppearance. Me encontré con que al intentar establecer la textColor a través de UIAppearance para cualquier UILabel dentro de un UIPickerView no tuvo efecto, pero un aspecto personalizado propiedad que se llama simplemente la regular textColor setter funcionado bien.

    //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
    

    Y, a continuación, utilizar la siguiente manera:

    UILabel *pickerLabelProxy = [UILabel appearanceWhenContainedInInstancesOfClasses:@[UIPickerView.class]];
    pickerLabelProxy.textColorWorkaround = UIColor.lightGrayColor;
    

Dejar respuesta

Please enter your comment!
Please enter your name here