iphone - uitableviewcell - uitableviewcontroller
Cambiar el color de los encabezados de la sección UITableView (5)
Bien, sé que esto se ha pedido anteriormente, así que perdóneme por preguntar nuevamente. Simplemente parece que tiene que haber una manera más fácil de hacer esto.
¿Hay una forma ''simple'' de cambiar el color de fondo del encabezado de la sección UITableView? Sé que puedo usar el método delegado ''viewForHeaderInSection'' para entregarle a UITableView una UIView personalizada para usar en los encabezados de sección, pero lo único que quiero hacer es configurar ''tintColor''. Hay una propiedad tintColor en la barra de búsqueda, por qué no para los encabezados de sección.
Si uso viewForHeaderInSection para crear mi propia UIView personalizada, también tengo que crear mi propia etiqueta. Tengo que diseñar y colocar mi etiqueta para que se vea igual que el resto del estándar de Apple. Tengo que diseñar y dimensionar el ''fondo'' para parecerme al resto del estándar de Apple.
No puedo encontrar una manera de simplemente pedir el encabezado de la sección y luego cambiar su color. ¿Me estoy perdiendo algo o tengo que hacerlo de la manera más difícil?
Si tengo que hacer esto de la manera más difícil, ¿alguien tiene toda la información de estilo que coincida con el estándar de Apple? - la barra es ''translúcida'' - la barra tiene algo de sombreado en la parte superior e inferior - la etiqueta tiene un cierto tamaño, posición, sombreados, etc.
Gracias. Y una vez más, perdón por volver a hacer esta pregunta.
Con UIAppearance puedes cambiar el color del texto de UILabel
en tus encabezados de UITableView
esta manera:
[[UILabel appearanceWhenContainedIn:[UITableViewHeaderFooterView class], nil] setTextColor:[UIColor whiteColor]];
[[UILabel appearanceWhenContainedIn:[UITableViewHeaderFooterView class], nil] setShadowColor:[UIColor whiteColor]];
Debería funcionar en iOS 6.0+. Puede ser llamado en cualquier lugar ( viewDidLoad
etc).
Con la nueva forma de hacer las cosas de UIA, en versiones> iOS 6.0, puede hacerlo, por ejemplo:
[[UITableViewHeaderFooterView appearance] setTintColor:[UIColor redColor]];
Esto es algo que pasé bastante tiempo luchando conmigo mismo, solo para encontrar que no hay forma de cambiar el tintColor del encabezado de la sección. La solución que se me ocurrió fue hacer una captura de pantalla del fondo del encabezado de la sección, cambiar el tono en Photoshop y luego usarlo como fondo del encabezado de la sección. Entonces es sólo un caso de poner la etiqueta.
Como dijo, lo que debe usar es el método de delegado viewForHeaderInSection.
Esto es lo que he encontrado que funciona y se parece al predeterminado de Apple:
UIView *customView = [[[UIView alloc] initWithFrame:CGRectMake(10.0, 0.0, 320.0, 22.0)] autorelease];
customView.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"headerbackground.png"]];;
UILabel *headerLabel = [[[UILabel alloc] initWithFrame:CGRectZero] autorelease];
headerLabel.backgroundColor = [UIColor clearColor];
headerLabel.opaque = NO;
headerLabel.textColor = [UIColor whiteColor];
headerLabel.font = [UIFont boldSystemFontOfSize:18];
headerLabel.shadowOffset = CGSizeMake(0.0f, 1.0f);
headerLabel.shadowColor = [UIColor colorWithRed:0.0 green:0.0 blue:0.0 alpha:0.5];
headerLabel.frame = CGRectMake(11,-11, 320.0, 44.0);
headerLabel.textAlignment = UITextAlignmentLeft;
headerLabel.text = @"Header Label";
[customView addSubview:headerLabel];
return customView;
Aquí "headerbackground.png" es una imagen de 1 píxel por 22 píxeles (el doble que para el iPhone 4) que se repetirá a lo largo del encabezado.
¡Espero que esto ayude!
La apariencia del método UIAppearanceWhenContainedIn ha quedado en desuso a partir de iOS 9.0; en su lugar, todavía puede hacer exactamente lo mismo con el método AppWhenContainedInInstancesOfClasses y una matriz.
[UILabel appearanceWhenContainedInInstancesOfClasses:@[[UITableViewHeaderFooterView class]]].textColor = [UIColor darkTextColor];
Si cambia la apariencia, como en las otras respuestas, se aplica a toda la aplicación. Si desea cambiar solo para una vista de tabla específica, implemente:
-(void)tableView:(UITableView *)tableView willDisplayHeaderView:(UIView *)view forSection:(NSInteger)section {
UITableViewHeaderFooterView * headerview = (UITableViewHeaderFooterView *)view;
headerview.contentView.backgroundColor = [UIColor greenColor];
headerview.textLabel.textColor = [UIColor whiteColor];
}