UITableViewでセクションを非表示にする - 行数を0にする

ボタンなどが押された際に、表示するセクション数を変更する方法を調べたのでメモしておきます。

```// セクション数は固定
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
return 3;
}

// セクションに対する行の数を、フラグを見て1->0に変更する。
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
switch (section) {
case 0:
return 1;
break;
case 1:
if ([self.hideSecondSectionFlag boolValue]) {
return 0;
} else {
return 1;
}
break;
case 2:
return 1;
break;

<pre><code> default:
return 0;
break;
}
</code></pre>

}

// セルの作成、内容設定は普通通り
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {<br />
UITableViewCell *cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:nil] autorelease];

<pre><code>switch (indexPath.section) {
case 0:
cell.textLabel.text = @"section 0";
break;
case 1:
cell.textLabel.text = @"section 1";
break;
case 2:
cell.textLabel.text = @"section 2";
break;
default:
cell.textLabel.text = @"section def";
break;
}
// Configure the cell.
return cell;
</code></pre>

}

// クリックされた時にフラグを切り替え、テーブルをリロードする。
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
switch (indexPath.section) {
default: {
[self changeSectionFlag];
// テーブルをリロード
[self.tableView reloadData];
break;
}
}
}
```

ただし、テーブルのスタイルがUITableViewStyleGroupedの場合、セクションを隠した場合に2倍の間隔が表示されてしまいます。あくまで行0のセクションがあるということで、上下の間隔は残ったままなのだと思われます。

この記事が役に立った場合、シェアしていただけると励みになります!!