iPad アプリケーションに展開および折りたたみ可能な UITableView を実装しました。ユーザーはセクションを追加または削除できます。セクションヘッダーに配置されているボタンタグのベースにあるセクションを削除しています。セクションを最後から最初に削除する場合は問題ありません。そうしないと、2 回目または 3 回目の削除でアプリケーションがクラッシュします。セクションを削除すると、UIButton のタグが更新されないためです。ここに私のコードがあります
-(UIView*)tableView:(UITableView*)tableView viewForHeaderInSection:(NSInteger)section {
/*
Create the section header views lazily.
*/
// delete button.
delButton = [UIButton buttonWithType:UIButtonTypeCustom];
delButton.frame = CGRectMake(600.0, 5.0, 35.0, 35.0);
[delButton setImage:[UIImage imageNamed:@"trash.png"] forState:UIControlStateNormal];
delButton.tag = section;
[delButton addTarget:self action:@selector(deleteSectionHeader:) forControlEvents:UIControlEventTouchUpInside];
Section *aSection=[sectionArray objectAtIndex:section];
if (!aSection.sectionHeaderView) {
aSection.sectionHeaderView = [[SectionHeaderView alloc] initWithFrame:CGRectMake(0.0, 0.0, subActivityTableView.bounds.size.width, HEADER_HEIGHT) title:aSection.sectionHeader section:section delegate:self];
[aSection.sectionHeaderView addSubview:delButton];
}
return aSection.sectionHeaderView;
}
-(void)deleteSectionHeader:(UIButton*)sender{
NSInteger section = sender.tag;
[sectionArray removeObjectAtIndex:section];
[subActivityTableView deleteSections:[NSIndexSet indexSetWithIndex:section] withRowAnimation:UITableViewRowAnimationAutomatic];
// reload sections to get the new titles and tags
NSInteger sectionCount = [sectionArray count];
NSIndexSet *indexes = [NSMutableIndexSet indexSetWithIndexesInRange:NSMakeRange(0, sectionCount)];
[subActivityTableView reloadSections:indexes withRowAnimation:UITableViewRowAnimationNone];
[subActivityTableView reloadData];
}