2010-07-30 8 views
9

¿Cuál es la diferencia entre agregar la subvista a uno mismo y/o a la vista de contenido?Subclasificando UITableViewCell correctamente?

subvista añadió a la libre

- (id)initWithFrame:(CGRect)frame { if ((self = [super initWithFrame:frame])) { 
    UIImage *img = [UIImage imageNamed:@”lol.jpg”]; 
    UIImageView *imgView = [[UIImageView alloc] initWithImage:img]; 
    [self addSubview:imgView]; 
    [imgView release]; 
    return self; 
} 

subvista añadido a contentView

- (id)initWithFrame:(CGRect)frame { if ((self = [super initWithFrame:frame])) { 
    UIImage *img = [UIImage imageNamed:@”lol.jpg”]; 
    UIImageView *imgView = [[UIImageView alloc] initWithImage:img]; 
    [self.contentView addSubview:imgView]; 
    [imgView release]; 
    return self; 
} 

Respuesta

25

Según la Apple docs:

la vista del contenido de un objeto de UITableViewCell es el supervista predeterminado para el contenido mostrado por la celda. Si desea personalizar las celdas simplemente agregando vistas adicionales, debe agregarlas a la vista de contenido para que se ubiquen apropiadamente a medida que la celda ingresa y sale del modo de edición.

Generalmente, usted agrega contenido cuando se siente cómodo con el cambio de tamaño y el posicionamiento de su contenido manejado por la configuración de autoresize, y la subclase UITableViewCell cuando necesita algún comportamiento personalizado y tal. La Guía de programación de Apple Table View tiene una gran sección en customizing UITableViewCells.

0

Siempre debe insertar su vista personalizada en la celda contentView. Asegúrese de que no utiliza

cell.textLabel?.text 
0

Su porque cuando un tableviewcell entra en el modo de edición que añadirá otros controles como botón de borrar a la célula. por lo que su contenido debe cambiar de tamaño para dejar espacio a los nuevos controles. Si agrega sus subvistas directamente a tableviewcell, estos controles de edición oscurecerían las subvistas que agregó. La celda no puede ajustar su tamaño cuando ingresa al modo de edición (debe seguir siendo el ancho de la vista de tabla). pero el objeto contentView puede y lo hace. es por eso que debe agregar sus subvistas al objeto contentView.