2013-02-27 15 views
11

クリックしてtableviewセルを展開します。 2つのセルが拡張可能であり、他のセルが拡張可能でないテーブルビューがあります。展開可能なセルをクリックすると、その下にセルが表示され、もう一度クリックすると非表示にする必要があります。これを定義するイメージがあります。UITableViewstylePlainのUITableViewセルを

enter image description here

どのように私はこの機能を実現することができ、上記のために案内してください。 ありがとうございます。

+0

問題を解決しましたか? – Bhavin

+0

いいえ、まだ.... –

+0

あなたは私の答えをチェックしましたか? – Bhavin

答えて

12

Hereは、ここでそのためのコードスニップだ拡張のUITableView

との完全なチュートリアルです。絵の下に示すように

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

      } 
     } 
    } 
} 

enter image description here

Thisthisは一つの解決策はまた、拡張可能なテーブルビュー

+0

これはグループテーブルです、私はプレーンテーブルのみを求めています。 –

+0

@iPhoneあなたは[this](http://www.roostersoftstudios.com/2011/04/14/iphone-uitableview-with-animated-expanding-cells/)のプレーンテーブルについてチェックしました – swiftBoy

+0

私はそのようなサンプルを見たことがありますポスティングの質問では、これはセクションを展開します。プレーンではただ1つのセクションのみが展開する必要があります。 –

3

私はあなたが望むものはすでにAppleによって与えられていると思います。 Appleによってテーブルビューのアニメーションとジェスチャーのタイトルで提供されたSample Codeをご覧ください。

0

これは、デリゲートによって可能であるを管理する方法を理解するのに役立ち

- (NSInteger)tableView:(UITableView *)tableView indentationLevelForRowAtIndexPath:(NSIndexPath *)indexPath { 
     //write code here 
    } 
+0

この目的のためにこのメソッドを使用したことがありますか? –

4

さて、私が考えていることで、タイトル、イベントオーバーヘッドと友達は、タイトルの背景についてUIImageViewUILabel、およびUIButtonのための拡大を持つカスタムUIViewだろう。だから基本的に

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView 

あなたが持っているタイトルの戻り数があります。

- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section 

返されるタイトルはそれぞれUIViewです。

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 

そのタイトル内の行の数を持つ。 このために配列を維持する必要があるかもしれません。上のユーザタップが膨張するとき、最初に、それは、すべてのセクションのための0(ゼロ)であるべきで、それは行の数に対して増加されるべき細胞項目

- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section 

の高さを有する

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath; 

*セルの高さはです。

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

あなたは拡張のためのすべての行を設定するためのいくつかの良いロジックが必要な場合があります

あなたがsender.tagを使用して拡張するためにどのセクションを識別することができますあなたの拡張ボタンのアクションのようなもの、

- (void) expandSection:(UIButton *)sender; 

タグを正しく追加することを忘れないでください。現在のセクションを保存するためにが.hファイルに必要な場合があり、- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)sectionデータソースメソッドで使用できます。

2

以下に、ソースコード例を示します。この例は、要件に基づいてカスタマイズできます。

ソースコードリンク:Click here

出力画面:

enter image description here

0

受け入れ答えは本当ですが、リンクが古くなっています。あなたは、余分なものをしなければならない仕事にその例を取得するには:ここから

ダウンロードExpandableTableCellsプロジェクト:
https://github.com/cocoanetics/Examples

はこちらからDTCustomColoredAccessory.hとの.mファイルをダウンロードします。 https://github.com/Cocoanetics/DTFoundation/tree/develop/Core/Source/iOS

をDTCustomColoredAccessoryを入れてExpandableTableCellsプロジェクトのファイル。

ここでは、実際の例があります。ゼロからの書き込みを試みるのではなく、そこから編集して移動する方が簡単です。

+0

私は 'Download ExpandableTableCells project'をダウンロードしてダウンロードDTCustomColoredAccessory.hと.mファイルを追加しました。しかし、エラーが表示されます。「エラー:リンカーコマンドが終了コード1で失敗しました(呼び出しを見るために-vを使用します)」と助けてください。 –

+0

あなたはエラーの詳細を投稿できますか? – Esqarrouth

関連する問題