2009-12-13 13 views
16

Estoy tratando de personalizar la fuente de un UITableViewCell utilizando el siguiente código para cuando se llena la tabla vista.Fuente UITableViewCell no cambia

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 

    static NSString *MyIdentifier = @"MyIdentifier"; 
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:MyIdentifier]; 
    if (cell == nil) 
    { 
     cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:MyIdentifier]; 
    } 

    // Set up the cell 
    int storyIndex = [indexPath indexAtPosition: [indexPath length] - 1]; 
    NSString *temp = [[NSString alloc] initWithString:[[stories objectAtIndex: storyIndex] objectForKey: @"title"]]; 
    cell.textLabel.text = temp; 
    [[cell textLabel] setTextColor:[UIColor colorWithRed:154.0/255.0 green:14.0/255.0 blue:2.0/255.0 alpha:1]]; 
    [[cell textLabel] setFont:[UIFont systemFontOfSize:12.0]]; 

    return cell; 
} 

Para la vida de mí no sé por qué no va a cambiar la fuente! También el código anterior funciona bien si código difícil en lo que es el texto de la celda como cell.textLabel.text = @"TEST";

¿Alguna sugerencia? ¡Gracias!

Respuesta

29

En primer lugar, debe liberar su celda de forma automática. Usted está perdiendo memoria como loco en este momento.

En segundo lugar, debe actualizar la fuente en tableView:willDisplayCellForRow:atIndexPath:. Si está utilizando una vista de tabla estándar, hará cambios en sus celdas (en momentos aleatorios) y tendrá que hacer cosas como cambios de fuente, color de fondo, etc. en el tableView:willDisplayCellForRow:atIndexPath: en lugar de en el método de fuente de datos.

Véase también en este tema: What is -[UITableViewDelegate willDisplayCell:forRowAtIndexPath:] for?

+0

Podría explicar con más detalle los métodos donde debo cambiarlo? ¡Gracias! –

+1

No importa, lo tengo. –

4

Sólo se puede tratar con el siguiente código.


-(UITableViewCell *) tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{ 
    static NSString *cellString = @"cell"; 
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellString]; 
    if(cell == nil){ 
     cell = [[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:cellString]; 
    } 
    cell.textLabel.text = values; 
    cell.textLabel.textColor = [UIColor colorWithRed:154.0/255.0 green:14.0/255.0 blue:2.0/255.0 alpha:1]; 
    cell.textLabel.font = [UIFont systemFontOfSize:12.0]; 
    return cell; 
}
+0

cell.font ahora obsoleto – barfoon

+0

intente utilizar cell.textLabel.font o cell.detailTextLabel.font – jfalexvijay

+1

Debería actualizar la respuesta entonces – barfoon

8

@ Jason Coco:

- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath { 
} 
3

intento,

cell.textLabel.font = [UIFont systemFontOfSize:12.0]; 
cell.detailTextLabel.font = [UIFont systemFontOfSize:10.0]; 
-2

muy simple, `

- (void)configureCell:(UITableViewCell *)cell atIndexPath:(NSIndexPath *)indexPath 
{ 

    cell.textLabel.textColor = [UIColor grayColor]; //redColor greenColor etc. 
} 
1

willDisplayCell: forRowAtIndexPath: se puede utilizar para modificar el fondo de la celda color, vista de contenido, etc., excepto la propiedad de backgroundColor TextLabel y detailtextlabel

Siempre es una buena práctica para hacer estas modificaciones en el método anterior

Cuestiones relacionadas