2012-08-30 11 views
5

¿Es posible tener más de una uitableviewCell personalizada dentro de la misma xib?Más de una celda personalizada con en la misma XIB

Estoy tratando de guardar archivos XIB combinando diferentes celdas personalizadas dentro del mismo xib y luego haciendo que la Tabla cargue diferentes archivos de ella.

En IB, traté de configurar cada clase uiTableViewCell en una clase diferente .m/.h personalizada. Esto es lo que he intentado:

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

static NSString *cellIdentifier = @"DevConfigCell"; 

DeviceInfoCell *cell = (DeviceInfoCell *)[tableView dequeueReusableCellWithIdentifier:cellIdentifier]; 

if(cell == nil) 
{ 

    NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"CustomTableViewCell~iphone" owner:self options:nil]; 
    cell = (DeviceInfoCell *)[nib objectAtIndex:0]; 

} 

return cell; 
} 

En otra mesa, me gustaría volver a usar la punta, pero me gustaría hacer esto:

cell = (SecondDeviceInfoCell *)[nib objectAtIndex:0]; 

Por alguna razón, siempre se carga la primera célula.

¿Esto debería funcionar? o hay alguna manera?

Gracias

Respuesta

3

que estoy tratando de guardar archivos XIB mediante la combinación de diferentes células personalizadas dentro de la misma xib

¿Por qué? No hay límite en la cantidad de archivos .xib que puede crear.

y luego tener la tabla carga diferentes de ella. Se crean

Cuando se carga un .xib, todos los objetos que contiene el archivo. Si coloca 10 celdas personalizadas en un .xib, al cargar ese .xib se creará una instancia de cada una de esas 10 celdas. Probablemente eso no es lo que quieres. Mantener sus celdas en .xibs por separado es probablemente un mejor plan.

cell = (SecondDeviceInfoCell *)[nib objectAtIndex:0];

usted parece estar confundido acerca de lo que hace la colada. Cuando lanzas de un tipo a otro, de alguna manera no estás seleccionando un objeto diferente. El objeto devuelto por [nib objectAtIndex:0] siempre será el mismo si la matriz nib tiene el mismo contenido. Casting solo cambia el tipo que el compilador asocia con el valor; en este caso, cambia el tipo de puntero.

Puede crear un IBOutletCollection en su controlador de vista y luego conectar varias celdas personalizadas diferentes a esa colección de salida; eso le dará una matriz de celdas que puede seleccionar usando objectAtIndex:. Pero, de nuevo, no es una buena idea ya que creará todas las celdas en el archivo cada vez que necesite solo una.

+1

No sé si estoy de acuerdo con @mskw, pero me parece interesante por motivos de organización. Es muy inconveniente tener una multitud de celdas en diferentes archivos. Además, me parece que sería útil no mezclar definición de celda y pantallas en el guión gráfico. – enagra

0
NSArray *topLevelObjects = [[NSBundle mainBundle] loadNibNamed:@"PlayerAvgsTableCell" owner:nil options:nil]; 
    for(id currentObject in topLevelObjects) 
    { 
     if([currentObject isKindOfClass:[PlayerAvgsTableCell class]]) 
     { 
      cell = (PlayerAvgsTableCell *)currentObject; 
      break; 
     } 
    } 
} 
+2

¿Quizás deberías agregar una explicación? –

Cuestiones relacionadas