Comment créer un accordéon avec UItableview sous un UItableview?

Je travaille sur une application qui nécessite un menu de type app Facebook / Gmail, que j'ai déjà avec l'aide de DDMenuController. Mais maintenant j'ai besoin où l'une des lignes doit montrer l'accordéon sur le clic avec une autre tableview avec 5 rangées (tout devrait être cliquable et capable de pousser de nouveaux viewcontrollers). J'ai vu quelques exemples de code, mais rien ne semble convenir à mes besoins, donc j'essaie juste de le mettre ici en espérant que quelqu'un ait une meilleure solution.

Merci,

    Une meilleure solution consiste à développer ou réduire les sections TableView

    Un bon tutoriel est disponible ici

    Vous pouvez download l'exemple de code ici

    Exemple de code

    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { static NSSsortingng *CellIdentifier = @"Cell"; UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; if (cell == nil) { cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease]; } // Configure the cell... if ([self tableView:tableView canCollapseSection:indexPath.section]) { if (!indexPath.row) { // first row cell.textLabel.text = @"Expandable"; // only top row showing if ([expandedSections containsIndex:indexPath.section]) { cell.accessoryView = [DTCustomColoredAccessory accessoryWithColor:[UIColor grayColor] type:DTCustomColoredAccessoryTypeUp]; } else { cell.accessoryView = [DTCustomColoredAccessory accessoryWithColor:[UIColor grayColor] type:DTCustomColoredAccessoryTypeDown]; } } else { // all other rows cell.textLabel.text = @"Some Detail"; cell.accessoryView = nil; cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator; } } else { cell.accessoryView = nil; cell.textLabel.text = @"Normal Cell"; } return cell; } - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { if ([self tableView:tableView canCollapseSection:indexPath.section]) { if (!indexPath.row) { // only first row toggles exapand/collapse [tableView deselectRowAtIndexPath:indexPath animated:YES]; NSInteger section = indexPath.section; BOOL currentlyExpanded = [expandedSections containsIndex:section]; NSInteger rows; NSMutableArray *tmpArray = [NSMutableArray array]; if (currentlyExpanded) { rows = [self tableView:tableView numberOfRowsInSection:section]; [expandedSections removeIndex:section]; } else { [expandedSections addIndex:section]; rows = [self tableView:tableView numberOfRowsInSection:section]; } for (int i=1; i<rows; i++) { NSIndexPath *tmpIndexPath = [NSIndexPath indexPathForRow:i inSection:section]; [tmpArray addObject:tmpIndexPath]; } UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath]; if (currentlyExpanded) { [tableView deleteRowsAtIndexPaths:tmpArray withRowAnimation:UITableViewRowAnimationTop]; cell.accessoryView = [DTCustomColoredAccessory accessoryWithColor:[UIColor grayColor] type:DTCustomColoredAccessoryTypeDown]; } else { [tableView insertRowsAtIndexPaths:tmpArray withRowAnimation:UITableViewRowAnimationTop]; cell.accessoryView = [DTCustomColoredAccessory accessoryWithColor:[UIColor grayColor] type:DTCustomColoredAccessoryTypeUp]; } } } } 

    Un de mes travaux avait besoin d'avoir une vue en accordéon mais ayant plusieurs niveaux d'expansion et de réduction des cellules comme si vous ouvriez / fermiez votre structure de directory.

    J'ai fait un échantillon sur cela, j'ai été en mesure d'atteindre le résultat souhaité. Le concept de base est le même, j'utilise le path deleteRowsAtIndexPath et insertRowsAtIndex seulement mais en créant un object model qui a une relation parents-enfants et en chargeant les enfants dans le tableau principal chaque fois que le parent est engagé. Je ne suis pas bon à mettre un tutoriel afin que je partage mon code d'exemple, j'espère que cela aide quelqu'un.

    Code ici Accordion_git

    Mise à jour Did a une version SWIFT de cette, ne sais pas si optimale, mais cela fonctionne.

    Code ici Accordion_SWIFT

    Accordéon