2017-02-07 9 views
0

Webサービスからのデータを2段階までの展開可能なテーブルビューで表示する必要があります。これは静的なデータでは可能ですが、私はバックエンドから取り出されたデータでこの作業を行う方法を見つけることができません。ポストマンにこの例を以下に示す:JSON(expand-collapsible)でデータを表示する(objective-c)

One Level UITableView Data in Postman

上記最初のレベルの拡張のためのものです。ここでは、 "Accountants"がメインカテゴリであり、 "jj tags"、 "Certified Public" & "General Services"は展開後に表示されるサブカテゴリです(ユーザーが "Accountants"というセルをタップすると)。同様に、いくつかのカテゴリを表示する必要があり、第2レベルのさらなる拡張が含まれていてもいなくてもよい。 Webサービス用として

、私は2つの方法でデータをフェッチするオプションをしました:

  • は、単一のAPIでメインとサブカテゴリーの両方を取得する(上のスクリーンショットに示すように)。
  • メインとサブのカテゴリを別々のAPIで取得する。

は、これまでのところ私はcellForRowAtIndexPath

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

    return [[subCatArray objectAtIndex:section] count]; 
} 

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

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"ceLL" forIndexPath:indexPath]; 
    cell.textLabel.text = [[subCatArray objectAtIndex:indexPath.section] objectAtIndex:indexPath.row]; 
    return cell; 
} 

-(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView{ 

    return [catArray count]; 
} 

-(NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section{ 

    for (int i=0; i<[catArray count]; i++) { 
     if(section == i){ 
      return NSLocalizedString([catArray objectAtIndex:i], nil); 
     } 
    } 
    return nil; 
} 

titleForHeaderInSection &最初のレベルのサブカテゴリーに主なカテゴリを実装しようとしました。しかし私は2番目のレベルについてどのように行くのですし、これらの折りたたみ可能/拡張を行います?

答えて

0

開始する前に、プライマリセルとして展開するセルと、拡張セル(つまり、サブカテゴリセル)をセカンダリセルとして呼び出したいと思います。

実装を開始したので、プライマリセルをヘッダーにします。しかし、 "numberOfRowsInSection"メソッドでその特定のセクションのsubCatArrayカウントを与えることなく、 "numberOfRowsInSection"メソッドでカウントを返す予定の配列を変更する必要があります。その配列は、目に見える行の詳細が含まれている必要があります。つまり、最初は要素がゼロで、タップすると「Accountants」という要素が「jjタグ」、「Certified Public "&」などの要素の詳細を変更します。一般的なサービス "と" Accountants "セルを再度タップすると、配列は空になります。セクションヘッダーのタップを検出するには、 "viewForHeader"のフレームと等しいフレームのボタンを配置し、セクションインデックスをボタンタグとして渡すか、タップジェスチャーを使用できます。セクションをタップするときに呼び出されるセレクタにテーブルを再ロードすることを確認してください。

表ビューセクションを使用する代わりに、行を使用してプライマリとセカンダリの両方のセルを表示するだけで、それに応じてセルを配置するために使用する配列を変更できます。

+0

あなたはある程度助けてくれましたが、これは第3レベルには対応していません。 –

+0

フィードバックいただきありがとうございます –