UITableView: manejar la selección de celdas en una celda de vista de tabla de celdas mixtas y dinámicas
Estoy tratando de mezclar celdas dinámicas y estáticas en una vista de tabla agrupada: me gustaría obtenerDos secciones con celdas estáticas. en la parte superior seguido de unaseccion de celulas dinamicas (Por favor, consulte la captura de pantalla a continuación). He puesto el contenido de la vista de tabla aceldas estáticas.
EditarBasado en el consejo de AppleFreak, he cambiado mi código de la siguiente manera:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell;
if (indexPath.section <= 1) { // section <= 1 indicates static cells
cell = [super tableView:tableView cellForRowAtIndexPath:indexPath];
} else { // section > 1 indicates dynamic cells
CellIdentifier = [NSString stringWithFormat:@"section%idynamic",indexPath.section];
cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];
}
return cell;
}
Sin embargo, mi aplicación falla con un mensaje de error
Aplicación finalizada debido a la excepción no detectada 'NSInternalInconsistencyException', razón: 'UITableView dataSource debe devolver una celda de tableView: cellForRowAtIndexPath:'
para la sección 0 y la fila 0. La celda devuelta desdecell = [super tableView:tableView cellForRowAtIndexPath:indexPath]
para la sección 0 y la fila 0 esnil
.
¿Qué está mal con mi código? ¿Podría haber algún problema con mis puntos de venta? No he configurado ninguna salida porque estoy subclasificandoUITableViewController
y supuestamente no hay ninguna salida para la vista de tabla que se va a configurar (?). ¿Alguna sugerencia sobre cómo hacerlo mejor?
He recreado mi escena en el guión gráfico (consulte mi captura de pantalla actualizada más arriba) y reescribí el controlador de vista para comenzar desde una nueva base. También he leído la descripción en el foro de Apple como Applefreak sugirió. Sin embargo, corro en mi primer problema con el método.numberOfSectionsInTableView:tableView
, en la que incremento el número de secciones estáticas (dos) en una.
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
return [super numberOfSectionsInTableView:tableView] + 1 ; }
La aplicación se estrelló con el mensaje de error:
Aplicación de terminación debido a la excepción no detectada 'NSRangeException', razón: '*** - [__ NSArrayI objectAtIndex:]: índice 2 más allá de los límites [0 .. 1]'
¿Por qué este código no funciona para mí a pesar de que seguí las recomendaciones de Apple y Applefreak? ¿Es posible que el tableView haya cambiado un poco en iOS 6?
Solución: Tengo esto para trabajar ahora usando el ejemplo de código AppleFreaks en su respuesta a continuación. Gracias, AppleFreak!
Edición III: Selección de celda:Como puedo manejarselección de celdas en una vista de tabla de celdas mixtas (celdas dinámicas y estáticas)? Cuando llamosuper
y cuando llamoself tableView
? Cuando yo uso
[[super tableView] selectRowAtIndexPath:indexPath animated:NO scrollPosition:UITableViewScrollPositionNone]
e intenta verificar las rutas de índice seleccionadas con:
UITableView *tableView = [super tableView];
if ( [[tableView indexPathForSelectedRow] isEqual:customGrowthIndexPath] ) { .. }
Obtengo un valor de retorno denil
.
Como no puedo encontrar la fuente de mi error, realmente agradecería su ayuda.