4

私はDDMenuControllerの助けを借りてすでに持っているFacebook/Gmailiphoneアプリタイプのメニューを必要とするアプリに取り組んでいます。しかし今、私は、5行の別のテーブルビューでクリック時に行の1つがアコーディオンを表示する必要があるという要件があります(すべてがクリック可能で、新しいビューコントローラーをプッシュできる必要があります)。私はいくつかのコードサンプルを見ましたが、私の要件に合うものは何もないようです。誰かがより良い解決策を持っていることを期待して、ここにそれを出そうとしています。

ありがとう、

4

2 に答える 2

13

私の仕事の1つには、アコーディオンビューが必要でしたが、ディレクトリ構造を開いたり閉じたりするように、セルの複数のレベルの展開と折りたたみがありました。

その上でサンプルを作成しましたが、目的の結果を得ることができました。基本的な概念は同じです。deleteRowsAtIndexPathパスとinsertRowsAtIndexパスのみを使用していますが、親と子の関係を持つモデルオブジェクトを作成し、親がタップされるたびに子をメイン配列にロードします。私はチュートリアルを書くのが苦手なので、サンプルコードを共有しています。誰かに役立つことを願っています。

ここにコードAccordion_git

更新 これのSWIFTバージョンを実行しました。最適かどうかはわかりませんが、機能します。

ここにコードを書くAccordion_SWIFT

アコーディオン

于 2013-11-23T16:45:22.653 に答える
8

より良い解決策は、 TableViewセクションを展開または折りたたむことです

良いチュートリアルはここにあります

ここからサンプルコードをダウンロードできます

サンプルコード

- (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];

            }
        }
    }
}
于 2013-03-15T22:06:29.123 に答える