0

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];
}
4

0 に答える 0