2012-08-29 8 views
6

Estoy haciendo una aplicación que necesita la expansión de las células onclick para mostrar más detalles. He usado una celda personalizada y las agregué a una vista de UItable. Cuando hago clic en la celda, se anima bien y baja y cuando vuelvo a hacer clic sube, esto se hace cambiando la altura de la celda. El tamaño real de la celda personalizada es más grande que la celda que normalmente muestra. Cuando hago clic en la celda, se muestra la celda completa. El único problema que estoy teniendo es el desbordamiento de los datos. estos datos deben estar ocultos cuando la celda no está seleccionada. Solo cuando se selecciona se deben mostrar estos datos.Desbordamiento de células UItable ios

Me referí a diferentes articals, intenté cambiar la configuración de color encuadernado no funcionó para mí. Tengo el mismo tipo de problema planteado en esta pregunta iphone uitablecellview overflow, intenté la respuesta pero no funcionó.

Todo lo que necesito es cómo ocultar la parte inferior de la celda personalizada cuando no está extendida, y ¡muéstrela cuando esté extendida ...!

Estos son mis capturas de pantalla

When it is loaded Cuando se carga When I click on a cell Cuando hago clic en una celda] When I click on the 2nd cell Cuando hago clic en la segunda celda When I click on the cell which is expanded
Cuando hago clic en la celda de la cual ya está expandido Estos son los códigos de corte que he usado ....

// Declaring the SearchResultTable. 
    CGRect filterFrame = CGRectMake(0,31, 320, 400); 
    self.searchResultTable = [[UITableView alloc] initWithFrame:filterFrame]; 
    self.searchResultTable.dataSource = self; 
    self.searchResultTable.delegate = self; 
    self.searchResultTable.backgroundColor = [UIColor whiteColor]; 
    self.searchResultTable.separatorStyle = UITableViewCellSeparatorStyleSingleLine; 
    self.searchResultTable.separatorColor = [UIColor lightGrayColor]; 
    [self.view addSubview:self.searchResultTable]; 

//Adding cells 
    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath(NSIndexPath *)indexPath { 
    static NSString *CellIdentifier = @"ExpandedSearchResultTableCell"; 


    ExpandedSearchResultTableCell *cell = (ExpandedSearchResultTableCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 


    if (cell == nil) 
    { 
     cell.contentView.clipsToBounds = YES; 
     NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"ExpandedSearchResultTableCell" owner:self options:nil]; 
     cell = [nib objectAtIndex:0]; 


    } 

    cell.productNameLable.text = @"Only this should be shown"; 
    cell.productListLabel.text = @"This Should be hidden.. Only shown when expanded"; 
    [email protected]"This Should be hidden.. Only shown when expanded"; 
    cell.productTargetLable.text= @"This Should be hidden.. Only shown when expanded"; 
    [email protected]"This Should be hidden.. Only shown when expanded"; 
    [email protected]"This Should be hidden.. Only shown when expanded";; 


    return cell; 
} 


//on click event 
(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 




    // Deselect cell 
    [tableView deselectRowAtIndexPath:indexPath animated:TRUE]; 

    // Toggle 'selected' state 
    BOOL isSelected = ![self cellIsSelected:indexPath]; 

    // Store cell 'selected' state keyed on indexPath 
    NSNumber *selectedIndex = [NSNumber numberWithBool:isSelected]; 
    [selectedIndexes setObject:selectedIndex forKey:indexPath]; 

    // This is where magic happens... 
    [searchResultTable beginUpdates]; 
    [searchResultTable endUpdates]; 
} 

//Getting the height depending on expanded or not 
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { 
    // If our cell is selected, return double height 
    if([self cellIsSelected:indexPath]) { 
     return kCellHeight * 3.0; 
    } 

    // Cell isn't selected so return single height 
    return kCellHeight; 
} 

Respuesta

1

autorización I consiguió hecho mediante el uso de una sola bandera y una referencia a la celda en cellForRowAtIndexPath didSelectRowAtIndexPath. Y estableciendo mis etiquetas visibles y ocultas según el colapso y el estiramiento. La bandera se actualiza de acuerdo con si la celda está seleccionada o no ... !!

Gracias por ayudar a todos ..!

1

Si usted está buscando la expansión de células con el tipo tableview llano,

iPhone UITableView with animated expanding cells

Y si en caso de que esté utilizando tableview agrupados y quiere ampliar la selección de la sección de cabecera,

Table View Animations and Gestures

+0

Ya he completado la parte de la animación ... Solo necesito saber cómo ocultar la parte determinada de la celda ... De todos modos, me referiré a tus enlaces ... Ya he comprobado el primero – Gihan

0

Ooops, un montón de código hizo su publicación sucia.

No estoy revisando su código.

Te explicaré la lógica.

  1. Solo se mostrará esto irá en su indexpath.row = 0;
  2. Número de filas de la sección será si es seleccionado, entonces el recuento de las células se muestra + 1 else 1.
cell.productNameLable.text = @"Only this should be shown"; 
cell.productListLabel.text = @"This Should be hidden.. Only shown when expanded"; 
[email protected]"This Should be hidden.. Only shown when expanded"; 
cell.productTargetLable.text= @"This Should be hidden.. Only shown when expanded"; 
[email protected]"This Should be hidden.. Only shown when expanded"; 
[email protected]"This Should be hidden.. Only shown when expanded";; 

Esto hace que el código sucio. Si va a mostrar todos los datos en una celda, y solo se agrega una celda cuando selecciona una sección, sugeriré que agregue todos estos en diferentes celdas.

Todavía estoy confundido por qué están haciendo estos largos codificación, Please refer this answer for better explanation

+0

No, tienes la pregunta está equivocada ... No necesito agregar esto al 0 en bruto ... Estos detalles están en cada celda de mi tabla ... Necesito mostrar estos detalles en la parte del boton de celda personalizada ... Pero esta parte debe ser que se muestra cuando hago clic en la celda. Solo para fines de prueba, agrego estas cadenas ... – Gihan

Cuestiones relacionadas