UITableViewでセクションを非表示にする - 新しいセクション番号をふる

セクションを非表示にする - セクションの数を変更する」でセクション番号の調整をしましたが、あらかじめ異なるセクション番号をふっておいた方がいい気がしてきました。

```enum {
kSectionTop = 0,
kSectionMiddle = 1,
kSectionBottom = 2,
};

// フラグが立っている場合、セクション番号は100番台を使う。
enum {
kSectionChangedTop = 100,
kSectionChangedBottom = 101,
};

// ここは一緒で、フラグを見てセクション数を変えす。
- (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 kSectionTop:
case kSectionChangedTop:
return 1;
break;
case kSectionMiddle:
return 1;
break;
case kSectionBottom:
case kSectionChangedBottom:
return 1;
break;
default:
return 0;
break;
}
}

// セクション番号を調整しておけば、内容を変化させるために、中でフラグを参照する必要はなくなる。
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *identifier = @"cell";
UITableViewCell *cell = [self.tableView dequeueReusableCellWithIdentifier:identifier];
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:identifier] autorelease];
}

<pre><code>NSInteger section = [self adjustSection:indexPath.section];
switch (section) {
case kSectionTop:
case kSectionChangedTop:
cell.textLabel.text = @"Section Top";
break;
case kSectionMiddle:
cell.textLabel.text = @"Section Middle";
break;
case kSectionBottom:
cell.textLabel.text = @"Section Bottom";
break;
case kSectionChangedBottom:
cell.textLabel.text = @"Section Bottom(Changed)";
break;
default:
cell.textLabel.text = @"";
break;
}
return cell;
</code></pre>

}

// フラグが立っている場合は100を足す。
- (NSInteger)adjustSection:(NSInteger)section {
if ([self.hideSecondSectionFlag boolValue]) {
return section + 100;
}
return section;
}

```

これだと、表示を切り替える必要がでてきた場合に、switchの中でフラグを参照する必要がなくなります。

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