2010-11-17 12 views
6

Necesito agregar un bisel a mi UITableViewCell (línea blanca en la parte superior, línea oscura en la parte inferior). Ya tengo un CAGradientLayer agregado como una subvista de mi cell.layer. Lamentablemente, no puedo usar un UIImageView como fondo para mis celdas, por lo que deberá hacerlo en código. ¿Alguna sugerencia? ¡Gracias!Cómo agregar el bisel a UITableViewCell

Este es el código que tengo ahora para mi fondo de celda.

CAGradientLayer *gradientLayer = [CAGradientLayer layer]; 
gradientLayer.frame = cell.frame; 
gradientLayer.colors = [NSArray arrayWithObjects: 
    (id)[[UIColor colorWithRed:0.988 green:0.988 blue:0.988 alpha:1.0] CGColor], 
    (id)[[UIColor colorWithRed:0.9294 green:0.9294 blue:0.949 alpha:1.0] CGColor], 
    nil]; 
[cell.layer insertSublayer:gradientLayer atIndex:0]; 

Esto se ve bien, pero me gustaría tener una línea oscura 1 píxel en la parte inferior y una línea blanca 1 píxel en la parte superior para terminar la mirada.

Respuesta

6

Puede, y probablemente debería usar un UIImageView como fondo de la celda. Lo que estás haciendo actualmente es bastante incorrecto.

A UITableViewCell consiste en bastantes vistas en un hiarchy, es importante saber dónde se supone que debe enganchar sus puntos de vista. Esta jerarquía es la siguiente:

  • UITableViewCell - No toque el
    • backgroundView - Sustituir configurar su fondo personalizado para todas las filas.
    • selectedBackgroundView - Reemplazar para establecer un fondo personalizado para las filas seleccionadas/resaltadas.
    • contentView - No establezca esto, pero siéntase libre de agregar tantas subvistas como desee.
      • titleLabel
      • detailTitleLabel
      • imageView
      • sus propios puntos de vista
    • accessoryView

No es obvio desde el principio cómo reemplazar el backgroundView y el selectedBackgroundView. El UITableView mismo configurará estos automáticamente después de que haya devuelto la celda desde el método de fuente de datos -[tableView:cellForRowWithIndexPath:]. Significando cualquier cosa que establezcas siempre será anulado.

El truco consiste en implementar el método de delegado -[tableView:willDisplayCell:forRowAtIndexPath:] y establecer aquí el fondo personalizado.

Todo esto está bastante bien explicado en el Table View Programming Guide.

+0

PeyloW, muchas gracias! Voy a cambiar mi código en consecuencia, ¡aprecio la información! – NSAlexC

+0

PeyloW, gracias que funcionó muy bien. Leí el documento de Apple y me siento mucho mejor ahora. ¡Gracias de nuevo! – NSAlexC

+0

@ziggie: Es un placer: no olvide marcar una respuesta como aceptada una vez que su problema haya sido resuelto.Ayuda a otros a encontrar la solución más rápido, y ayuda a motivar a quien contestó. – PeyloW

1

Echa un vistazo a this link. Puede ignorar el efecto de brillo, pero de lo contrario creo que es lo que quiere.

+0

You rock slycrel! Esto funciona ahora. – NSAlexC

+0

Ese enlace no parece funcionar. –

+0

Enlace actualizado para ser (con suerte) más permanente. – slycrel

Cuestiones relacionadas