2009-09-28 23 views

Respuesta

62

La mejor manera de hacerlo es la siguiente:

// Customize the appearance of table view cells. 
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 
    static NSString *CellIdentifier = @"myCellId"; 
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
    if (cell == nil) { 
     cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease]; 
     UIView *v = [[[UIView alloc] init] autorelease]; 
     v.backgroundColor = [UIColor redColor]; 
     cell.selectedBackgroundView = v; 
    } 
    // Set up the cell... 
    cell.textLabel.text = @"foo"; 
    return cell; 
} 

La parte relevante para usted es la instrucción cell.selectedBackgroundView = v;. Puede sustituir la vista muy básica 'v' aquí con cualquier vista que desee.

+1

Zoran, he verificado que este enfoque funciona para vistas de tabla simple, sin embargo, no funciona para mis agrupados. Cualquier solución? ¿O puedes confirmar esto? –

+0

No depende del tipo de vista de tabla: acabo de descubrir que funciona en algunas tablas simples y no en otras tablas simples. Todos ellos usan celdas de tabla personalizadas. –

+1

Esto solo funciona sin fuzz para vistas de tabla simple. Para una vista de tabla agrupada, necesitará 4 vistas para diferentes fondos seleccionados; arriba, abajo, entre otras dos celdas, y celda individual en grupo. Luego viene el dolor de actualizar estos, se cambia el número de filas en cualquier segmento. Publique una solicitud de función en bugreport.apple.com para agregar una propiedad "selectedBackgroundGradient" para iPhone OS 4.0. – PeyloW

3

No creo que puedas usar un color personalizado. Sin embargo, puede utilizar la siguiente propiedad de UITableViewCell

@property(nonatomic) UITableViewCellSelectionStyle selectionStyle 

El estilo de la selección es una constante backgroundView que determina el color de una celda cuando se selecciona. El valor predeterminado es UITableViewCellSelectionStyleBlue. Desde

typedef enum { 
    UITableViewCellSelectionStyleNone, 
    UITableViewCellSelectionStyleBlue, 
    UITableViewCellSelectionStyleGray 
} UITableViewCellSelectionStyle; 

puede cambiar de la selección predeterminada de color azul a gris, o sin color.

+1

Si subescribes tu UITableViewCell, puedes resaltar en cualquier color. – mahboudz

+0

¿Cómo se hace esto exactamente para UITableViewCells personalizadas diseñadas con IB o mediante programación? Quiero decir, ¿hay algún método/propiedad que permita hacer esto SIN recurrir a trucos como poner otra vista en la parte superior de la celda? –

+0

¿puede enviarme el código para subclase de UITableViewCell y destacarlo con un color personalizado? por favor .. – smakstr

0

Otra forma de hacerlo sería mover una nueva vista sobre su celda, con el color que desee y una opacidad del 50% o así. Mueves esta vista a la celda cuando obtienes un -setSelected: animated: call. Cuando digo move, en realidad siempre puedes tener una vista en la parte superior de tu celda, pero solo apaga y enciende el bit oculto cuando lo necesites.

6

También me encontré con este problema al tratar de crear vistas de celda seleccionadas personalizadas para la celda agrupada. Resolví este problema creando 3 tipos de imágenes para la parte superior, media e inferior de la celda, suponiendo que habrá una celda intermedia.

NSString *imageFile; 

if (row == 0) { 
imageFile = @"highlighted_cell_top.png"; 
} else if (row == ([registeredDetailsKeys count] - 1)) { 
imageFile = @"highlighted_cell_bottom.png"; 
} else { 
imageFile = @"highlighted_cell_middle.png"; 
} 

UIImageView *imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:imageFile]]; 

cell.selectedBackgroundView = imageView; 

Posiblemente hay una manera más fácil, pero estoy contento con el resultado.

+0

Hasta donde yo sé, esa es exactamente la manera de hacerlo. Vea este [tutorial] (http://cocoawithlove.com/2009/04/easy-custom-uitableview-drawing.html). Olvidaste la variación "top_bottom" (cuando solo una celda), eso es todo. – Rich

3

Asegúrese de que después de declarar en la cabecera

@property(nonatomic) UITableViewCellSelectionStyle selectionStyle 

Implementar

cell.selectionStyle = UITableViewCellSelectionStyleGray 

donde UITableViewCellSelectionStyleGray puede haber UITableViewCellSelectionStyleNone, UITableViewCellSelectionStyleBlue, UITableViewCellSelectionStyleGray.

Cuestiones relacionadas