Come creare una Fisarmonica con UItableview sotto una UItableview?

Sto lavorando su un app che richiede un Facebook/Gmail app iphone tipo di menu che ho già, con l’aiuto di DDMenuController. Ma ora ho requisito nel caso in cui una delle righe deve dimostrare di fisarmonica in un clic, con un altro tableview con 5 righe (tutti dovrebbe essere cliccabile e in grado di spingere la nuova viewcontrollers).
Ho visto un paio di codice di esempio, ma nulla sembra soddisfare il mio fabbisogno, in modo che solo cercando di mettere qui sperando che qualcuno ha una soluzione migliore.

Grazie,

5 secondi su Google porta qualche tutorial decente. Come questo per esempio. Basta provare a cercare Espansione o compressione tableviews.
Si può dare un’occhiata a questo fisarmonica esempio in Swift: github.com/tadija/AEAccordion ha molto poco di codice per creare effetto fisarmonica (non utilizzando sezioni, ma le cellule), e, come bonus, c’è anche una soluzione per utilizzare XIB file all’interno di altri file XIB (utile per custom cellule che utilizzano visualizzazioni personalizzate).

OriginaleL’autore Ashutosh | 2013-03-15

2 Replies
  1. 8

    Soluzione migliore è Espandere o Comprimere TableView Sezioni

    Buon Tutorial è disponibile qui

    È possibile scaricare il codice di esempio qui

    Codice Di Esempio

    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
    {
        static NSString *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];
    
                }
            }
        }
    }
    questa non è un’espansione, è un maledetto avviso lol

    OriginaleL’autore Shamsudheen TK

  2. 12

    Uno del mio lavoro era un requisito per avere una fisarmonica vista, ma con più livelli di espansione e collasso delle cellule come aprire/chiudere la vostra struttura di directory.

    Ho fatto un esempio, sono stato in grado di ottenere il risultato desiderato. Il concetto di base è lo stesso, io sto usando il deleteRowsAtIndexPath e insertRowsAtIndex solo il percorso, ma con la creazione di un modello di oggetto che ha un genitore di bambini di relazione e di carico i figli nell’array principale ogni volta che il genitore è sfruttato. Io non sono bravo a mettere un tutorial che sto condividendo il mio codice di esempio, spero che aiuta qualcuno.

    Qui il codice di Accordion_git

    Aggiornato
    Ha fatto una rapida versione di questo, non sono sicuro sia ottimale, ma funziona.

    Qui il codice di Accordion_SWIFT

    Come creare una Fisarmonica con UItableview sotto una UItableview?

    che cosa è una cattiva scelta per un sito di condivisione..
    cambiato a git 🙂
    Grazie! Ho implementato questo controllo un paio di anni fa con nidificati tableviews, ma il tuo approccio è il modo più senso. Ciao.

    OriginaleL’autore anoop4real

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *