0

最初に、テーブルビューに 3 つのアイテムをリストする必要があります。
いずれかをクリックすると、選択したメイン アイテムのサブ アイテムとして 3 つ以上のアイテムが表示されます。

私が使用している配列は

aryTemp = [[NSMutableArray alloc] initWithObjects:[NSDictionary dictionaryWithObjectsAndKeys:@"YES", @"isExpand", [NSArray arrayWithObjects:@"One",@"Two",@"Three", nil], @"data", nil], nil];
aryTemp1 = [[NSMutableArray alloc] initWithObjects:[NSDictionary dictionaryWithObjectsAndKeys:@"NO", @"isExpand", [NSArray arrayWithObjects:@"Doc", @"XML", @"PDF", nil], @"data", nil], nil];

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
    return 3;
}
    - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
    {
        int count = 0;    
        if(!boolIsExpanded)
            count = 1;
        else {
            count = [[[aryTemp objectAtIndex:0] objectForKey:@"data"] count] + [[[aryTemp1 objectAtIndex:0] objectForKey:@"data"] count];
        }
        return count;
    }

    -(void)addOrDeleteRows:(NSIndexPath *)indexPath add:(BOOL)aBool
    {
    NSMutableArray *paths = [[NSMutableArray alloc] init];

    if(boolIsExpanded)
    {
        boolIsExpanded=NO;
        for (int i=1; i<=[[[aryTemp1 objectAtIndex:0] objectForKey:@"data"] count]; i++) {
            NSIndexPath *indxPath;
            indxPath = [NSIndexPath indexPathForRow:(indexPath.row)+i inSection:indexPath.section];
            [paths addObject:indxPath];
            NSLog(@"paths : %@",paths);
        }
        intPrevIndex = indexPath.row;
        [tblView beginUpdates];
        [tblView insertRowsAtIndexPaths:paths withRowAnimation:UITableViewRowAnimationLeft];
        [tblView endUpdates];
    }
    else 
    {
         boolIsExpanded = YES;
        for (int i = 1; i <= [[[aryTemp1 objectAtIndex:0] objectForKey:@"data"] count]; i++) {
            NSIndexPath *indxPath = [NSIndexPath indexPathForRow:(indexPath.row)+i inSection:indexPath.section];
            [paths addObject:indxPath];
        }
        intPrevIndex = indexPath.row;
        [tblView beginUpdates];
        [tblView deleteRowsAtIndexPaths:paths withRowAnimation:UITableViewRowAnimationLeft];
        [tblView endUpdates];
    }    
    }

この計算はどのように正確に行う必要がありますか?セクションを使用する場合。

行を挿入した後、呼び出しNumberOfRowてエラー Assertion failure in -[UITableView _endCellAnimationsWithContext:], /SourceCache/UIKit_Sim/UIKit-1914.84/UITableView.m:1037 2012-10-03 11:37:43.955 ExpandRowsSample[1657:f803] でクラッシュしますキャッチされない例外 'NSInternalInconsistencyException' が原因でアプリを終了しています。理由: '無効な更新: セクション 0 の行数が無効です。更新後の既存のセクションに含まれる行数 (6) は、そのセクションに含まれる行数と等しくなければなりません更新前のセクション (1)、そのセクションから挿入または削除された行数 (0 挿入、0 削除) をプラスまたはマイナスし、そのセクションに移動した行数またはそのセクションから移動した行数 (0 移動、0 移動)アウト)。' *

4

1 に答える 1

0

テーブル ビューの更新中に、それに応じてデータ ソースも変更する必要があり- tableView:numberOfRowsInSection:ますaryTemp

したがって、追加中に、次のような行の[aryTemp addObject:...];前にいくつかの呼び出しを行う必要があります。[tblView endUpdates];

for (int i=1; i<=[[[aryTemp1 objectAtIndex:0] objectForKey:@"data"] count]; i++) {
{
    // your current code
    [aryTemp addObject:...];
}

intPrevIndex = indexPath.row;
[tblView beginUpdates];
[tblView insertRowsAtIndexPaths:paths withRowAnimation:UITableViewRowAnimationLeft];
[tblView endUpdates];

行の削除に関しては、同じ概念を適用する必要があります。

于 2012-10-03T08:02:48.547 に答える