2012-08-23 10 views
10

En el siguiente código, si hacemos [cell addSubview: someLabel] contra [cell.contentView addSubview: someLabel], parece que funcionan igual. ¿Hay alguna diferencia haciendo uno o el otro? (La celda personalizado en el código real es la adición de UIImageView y UILabel) (UIView, por el contrario, no tiene contentView, por lo que no es necesario añadir subvista a su contentView. UITableViewCell es una subclase de UIView por cierto)En iOS, ¿cuál es la diferencia entre agregar una subvista a una "celda" de objeto UITableViewCell frente a "cell.contentView"?

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

    UITableViewCell *cell = nil; 

    if ([tableView isEqual:self.songsTableView]){ 

     static NSString *TableViewCellIdentifier = @"MyCells"; 

     cell = [tableView dequeueReusableCellWithIdentifier:TableViewCellIdentifier]; 

     if (cell == nil){ 
      cell = [[UITableViewCell alloc] 
        initWithStyle:UITableViewCellStyleDefault 
        reuseIdentifier:TableViewCellIdentifier]; 
     } 

     // ... some code to create a UILabel (not shown here) 

     [cell addSubview: someLabel]; // vs using [cell.contentView addSubView: ...] 

Respuesta

10

Creo que si no estoy equivocado, contentView es una subvista de UITableViewCell.

Si nos fijamos en esta página here, se puede ver en realidad hay 3 subvistas en un UITableViewCell

Creo que por defecto, el control de edición se podrá ver hasta entrar en el modo de edición para una mesa, en cuyo caso, la Aparecerá Control de edición (el botón menos de cada fila) y su contenido se redimensionará y empujará hacia la derecha. Esto es probablemente lo que le da el efecto de "animación adecuada" mencionado por la otra respuesta.

Para probar la diferencia, intente agregar una subvista como UILabel con texto a la celda en lugar de a cell.contentView. Cuando lo agrega a cell en lugar de cell.contentView e ingresa al modo de edición para su tabla, creo que su UILabel no cambiará de tamaño, verá el botón de edición en la parte superior/debajo del botón de signo menos.

+0

sí, me di cuenta que la razón no es interferir con otras regiones de una célula ... pero curiosamente, incluso si uso 'contentView', el ícono de eliminación puede traer un botón' Eliminar', y cubre el contenido área –

+0

y también se muestra debajo del Accesorio, incluso si se usa contentView, pero tal vez se deba a que contentView muestra algo más allá del área de contenido, y se confirma si muestro una imagen en 'x = 0' en el contenido área, y luego cámbielo a 'x = -16', y también irá debajo del ícono de eliminación en la región Editar. –

2

la colocación de sus puntos de vista en el contentView efectos de animación adecuada dentro y fuera del modo de edición. Coloque todas sus subvistas en contentView cuando no esté creando subclases, lo que debería ocurrir la mayor parte del tiempo a menos que sepa lo que está haciendo.

Cuestiones relacionadas