2012-02-15 10 views
9

Quiero definir una vista de tabla estática con una sección dinámica ¿Es eso posible?Incluir una sección con "prototipos dinámicos" en una vista de tabla estática con "celdas estáticas"

La sección 0 debe ser estática, las etiquetas están conectadas en xcode con las salidas.

sección 1 será dinámico

He intentado esto, pero yo no sé lo que he de volver de células de la parte estática.

static NSString *CellIdentifier = @"ItemCellBasic"; 
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 

switch (indexPath.section) 
{ case 0: 
    return // I don´t know what 

    case 1: 
    cell.textLabel [email protected]"dynamic"; 
    return cell;  
} 

EDIT 1; ahora he intentado:

case 0: return [super tableView:tableView cellForRowAtIndexPath:indexPath]; 

pero obtuvo:

*** Assertion failure in -[UITableView _createPreparedCellForGlobalRow:withIndexPath:], /SourceCache/UIKit_Sim/UIKit-1912.3/UITableView.m:6072 
*** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'UITableView dataSource must return a cell from tableView:cellForRowAtIndexPath:' 
+0

la propiedad: "contenido" en xcode, que puede ser "celdas estáticas" o "prototipos dinámicos". – mica

Respuesta

5

tengo una solución parcial para este problema

En la vista de tabla métodos fuente de datos vuelvo las superclases resultado de las células estáticas , para las celdas dinámicas, devuelvo los valores dinámicos necesarios.

En - (UITableViewCell *) tableView: (UITableView *) tableView cellForRowAtIndexPath: (NSIndexPath *) indexPath la dequeueReusableCellWithIdentifier: devuelve nil lo tanto, crear un nuevo UITableViewCell

El problema restante:

en Xcode se tiene que especificar el número de filas en la "sección dinámica" (que por supuesto no es dinámico). No puede mostrar más que el máximo que definió aquí (u obtener una excepción ;-)).

SampleCode:

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 
{ 
    switch (section) 
    { case STATIC_SECTION: 
     return [super tableView:tableView numberOfRowsInSection:section]; 

    case DYNAMIC_SECTION 
     return NUMBER_OF_DYNAMIC_ROWS; 
    } 
} 

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    static NSString *CellIdentifier = @"ItemCellBasic"; 
    UITableViewCell *cell; 

    switch (indexPath.section) 
    { 
    case STATIC_SECTION: 
     return [super tableView:tableView cellForRowAtIndexPath:indexPath]; 

    case DYNAMIC_SECTION: 
     cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
     if (!cell) 
     { cell=[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] ; 
     } 

     cell.textLabel.text=DYNAMIC_TEXT; 
     return cell;  
    } 

} 
+0

En realidad, puede agregar cualquier cantidad de celdas dinámicas. Ver [enlace] (http://stackoverflow.com/questions/10043521/adding-unknown-number-of-rows-to-static-cells-uitableview/10060997#comment15940351_10060997) – DanSkeel

-1

en lugar de un interruptor trate de usar una buena vieja si las declaraciones

-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{ 
     if(section==STATIC_SECTION){ 
      return *the number of rows in the static section* 
     } 
     else{ 
      return NUMBER_OF_DYNAMIC_ROWS; 
     } 
    } 

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

    static NSString *CellIdentifier = @"ItemCellBasic"; 
    UITableViewCell *yourCell = [tableView dequeReusableCellWithIdentifier:CellIdentifier forIndexpath:indexPath]; 

    yourCell.text = *your dynamic text or something* 

    return yourCell; 
} 

ahora asumiendo sus células estáticas no tienen identificadores reutilización, causa que acaba serían redundantes, y dado que solo necesita un prototipo de celda para su reutilización, esta debe ser su configuración

Cuestiones relacionadas