クリックでテーブルビューセルを展開したい。2 つのセルが展開可能で、他のセルが展開できないテーブルビューがあります。拡張可能なセルをクリックすると、その下にセルが表示され、もう一度クリックすると非表示になる必要があります。これを定義する下の画像があります。
この機能を実現するにはどうすればよいですか。上記のガイドを参照してください。前もって感謝します。
クリックでテーブルビューセルを展開したい。2 つのセルが展開可能で、他のセルが展開できないテーブルビューがあります。拡張可能なセルをクリックすると、その下にセルが表示され、もう一度クリックすると非表示になる必要があります。これを定義する下の画像があります。
この機能を実現するにはどうすればよいですか。上記のガイドを参照してください。前もって感謝します。
Expandable 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];
}
}
}
}
下の写真のように
さて、私が考えているのは、タイトル、イベント、オーバーヘッド、およびフレンズUIView
は、UIImageView
背景、UILabel
タイトル、および展開のカスタムUIButton
です。だから基本的に
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
あなたが持っているタイトルのリターンカウントを持っています。
- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
UIView
タイトルごとにリターンあり。
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
そのタイトル内の行数を持っています。このために配列を維持する必要があるかもしれません。
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath;
セル項目の高さ
- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
最初はすべてのセクションで 0 (ゼロ) にする必要があります。ユーザーが展開をタップすると、そのセクション内の行数 * セルの高さに関して増加する必要があります。
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
すべての行を拡張用に設定するには、適切なロジックが必要になる場合があります
拡張ボタンのアクションは次のようになります。
- (void) expandSection:(UIButton *)sender;
sender.tag を使用して展開するセクションを特定できるため、タグを適切に追加することを忘れないでください。int
現在のセクションを保存するための.h
ファイルが必要な場合があり、- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
データソース メソッドで使用できます。
あなたが望むものはすでにAppleによって与えられていると思います。Table View Animations and Gesturesというタイトルで、Apple が提供するサンプル コードを確認できます。
JKExpandTableViewは、展開可能なテーブル ビューを実装する MIT ライセンスの iOS ライブラリです。同梱のサンプルプロジェクトも必ずチェックアウトしてください。
受け入れられた答えは真実ですが、リンクは古くなっています。その例を機能させるには、追加のことを行う必要があります。
ここから ExpandableTableCells プロジェクトをダウンロードします:
https://github.com/cocoanetics/Examples
ここから DTCustomColoredAccessory.h および .m ファイルをダウンロードします: https://github.com/Cocoanetics/DTFoundation/tree/develop/Core/Source/iOS
DTCustomColoredAccessory ファイルを ExpandableTableCells プロジェクトに配置します。
ゼロから書き込もうとするのではなく、そこから編集して移動する方が簡単です。
これはデリゲートによって可能です
- (NSInteger)tableView:(UITableView *)tableView indentationLevelForRowAtIndexPath:(NSIndexPath *)indexPath {
//write code here
}