2010-05-24 14 views
7

Me trataron de poner en práctica elCómo recrear el UIView predeterminado igual que el tableView predeterminado: viewForHeaderInSection :?

- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section 

para obtener la etiqueta de texto del encabezado en la sección del color negro en lugar del color blanco, pero se ve tan diferente de la que viene por defecto creado por el SDK, la mía es tan feo.

¿Cómo recrear la UIView exactamente igual a la del SDK?

De la documentación de Apple:

Discussion
La vista de tabla utiliza un estilo de fuente fija para los títulos de la sección de cabecera. Si desea un estilo de fuente diferente, devuelva una vista personalizada (por ejemplo, un objeto UILabel) en el método delegado tableView: viewForHeaderInSection: en su lugar.

Respuesta

13

Aunque esto no es exactamente correcto, estoy publicando esto con la esperanza de que alguien pueda mejorar mi enfoque. El texto es correcto (blanco como predeterminado, pero puede cambiar eso). El gradiente de fondo y la opacidad no son perfectos (¿son demasiado claros?). Es posible que se necesiten algunos ajustes aquí.

Obtener el sectionheaderbackground.png aquí: http://img5.imageshack.us/img5/6616/sectionheaderbackground.png

// Create a stretchable image that emulates the default gradient 
UIImage *buttonImageNormal = [UIImage imageNamed:@"sectionheaderbackground.png"]; 
UIImage *stretchableButtonImageNormal = [buttonImageNormal stretchableImageWithLeftCapWidth:12 topCapHeight:0]; 

// Create the view for the header 
CGRect sectionFrame = CGRectMake(0.0, 0.0, 320.0, 22.0); 
UIView *sectionView = [[UIView alloc] initWithFrame:sectionFrame]; 
sectionView.alpha = 0.9; 
sectionView.backgroundColor = [UIColor colorWithPatternImage:stretchableButtonImageNormal]; 

// Create the label 
CGRect labelFrame = CGRectMake(10.0, 0.0, 310.0, 22.0); 
UILabel *sectionLabel = [[UILabel alloc] initWithFrame:labelFrame]; 
sectionLabel.text = @"Test section label"; 
sectionLabel.font = [UIFont boldSystemFontOfSize:18.0]; 
sectionLabel.textColor = [UIColor whiteColor]; 
sectionLabel.shadowColor = [UIColor grayColor]; 
sectionLabel.shadowOffset = CGSizeMake(0, 1); 
sectionLabel.backgroundColor = [UIColor clearColor]; 
[sectionView addSubview:sectionLabel]; 
[sectionLabel release]; 

// Return the header section view 
return sectionView; 
+0

gracias por su respuesta! Trataré de avisarte. El truco aquí es usar la imagen existente como color de fondo :) Pensé que usan un color con el nombre: p –

+0

Como DavidD respondió a continuación, 'return nil' da el aspecto más nativo. –

+0

Sure, return nil le da el aspecto más nativo, pero no le permite personalizar nada, como el color del texto, que es lo que la pregunta estaba pidiendo. – dferg

0

Puede intentar imitar usando shadowColor y shadowOffset.

lo he hecho en negro por ejemplo utilizando un código como el siguiente:

label.shadowColor = [UIColor whiteColor]; 
label.shadowOffset = CGSizeMake(1, 1); 

Por jugar con los colores y combinaciones de sombra, que puede imitar la etiqueta bastante bien.

+0

Hola Rick, ¿qué tal el fondo? ¿Qué color debo usar? –

+0

¿Lo está poniendo en una vista de tabla agrupada? Si es así, debería tener un color de fondo de [UIColor clearColor]; – rickharrison

+0

No, Rick, esto no es lo que quiero. A partir de la discusión de la documentación de Apple tal como lo mencioné en la pregunta, quiero volver a crear la vista personalizada que es igual a los títulos de cabecera de sección predeterminados de Apple con el color del texto en negro, en lugar del color blanco predeterminado. El problema es que el fondo predeterminado es muy especial, no sé qué color es ese y parece que es degradado. –

1

, usted puede obtener los encabezados de sección UITableView predeterminado mediante la implementación de los métodos siguientes en su clase tableview:

-(UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section 
{ 
    return nil; 
} 

- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section 
{ 
    return 22; //returning 0 hides section headers 
} 

Esto podría ser particularmente útil si utiliza un UISearchDisplayController en su aplicación, donde desea que los resultados de la búsqueda se muestren de manera simple UITableViewStylePlain en lugar de, digamos, de su custo mesa principal mized. A continuación, podría implementar algo como esto:

-(UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section 
{ 
    if ([self.searchDisplayController.searchBar isFirstResponder]) return nil; 
    //create and return your custom UIView here 
} 
+0

esto no ayuda al OP a cambiar el color del texto – user102008

+0

¡Esta es la respuesta más relevante! Si desea regresar con el encabezado de la sección de aspecto predeterminado, simplemente devuelva nil. ¡Gracias por el consejo! –

0

Si desea recrear la predeterminado/norma heightForHeaderInSection, utilice esto:

- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section 
{ 
    return 44; 
} 

- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section 
{ 
    UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0, 0, tableView.frame.size.width, 44)]; 

    UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(50, 11, tableView.frame.size.width-100, 21)]; 

    label.text = @"Text"; 
    label.textColor = [UIColor colorWithRed:76.0/255 green:86.0/255 blue:108.0/255 alpha:1]; 
    label.backgroundColor = [UIColor clearColor]; 
    label.font = [UIFont fontWithName:@"Helvetica-Bold" size:17.0]; 

    [view addSubview:label]; 

    return view; 
} 
Cuestiones relacionadas