UITableViewでセクションを非表示にする - セクションの数を変更する

前に書きました、「セクションを非表示にする - 行数を0にする」以外にも、セクションの数自体を変更することでも、特定のセクションを非表示にできます。ただし、その場合はセクションの番号が変わってきてしまうので注意が必要です。

```// セクション数をフラグで切り替える。
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
if ([self.hideSecondSectionFlag boolValue]) {
return 2;
} else {
return 3;
}
}

// 以下、セクションの番号を使用する処理においては、セクションの番号を調整するメソッドを呼ぶ必要がある。
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
section = [self adjustSection:section];
switch (section) {
case 0:
return 1;
break;
case 1:
return 1;
break;
case 2:
return 1;
break;

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

}

<ul>
<li>(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{<br />
UITableViewCell *cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:nil] autorelease];

NSInteger section = [self adjustSection.section];
switch (section) {
case 0:
case 1:
case 2:
cell.textLabel.text = [NSString stringWithFormat:@"section %d", section];
break;
default:
cell.textLabel.text = @"section def";
break;
}
// Configure the cell.
return cell;
}</p></li>
<li><p>(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
NSInteger section = [self adjustSection.section];
switch (section) {
default: {
[self changeSectionFlag];
// テーブルをリロード
NSLog(@"clicked section: %d", section);
[self.tableView reloadData];
break;
}
}
}</p></li>
</ul>

<p>// セクション番号を調整する非常にシンプルな例
- (NSInteger)adjustSection:(NSInteger)section {
if ([self.hideSecondSectionFlag boolValue]) {
if (section == 1) {
return section + 1;
}
}
return section;
}```

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