0

問題は、グループ化されたテーブルビューが必要で、セルをクリックすると、その下に別のセルが表示されるようにしたいなどです。ワークフローはすべて問題ありませんが、アニメーションには同じ問題があります。動作が非常に遅く、すべての変更を確認できます

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
    NSLog(@"selected section:%d selected row:%d",indexPath.section,indexPath.row);

    NSIndexPath* pathToDelete;

    [_tableView beginUpdates];
    if (_selectedPath != nil && [_selectedPath isEqual:indexPath]){
        //If the same row was selected
        pathToDelete = [NSIndexPath indexPathForRow:_selectedPath.row+1 inSection:_selectedPath.section];
        _selectedPath = nil;
        [_tableView beginUpdates];
        [_tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:pathToDelete] withRowAnimation:UITableViewRowAnimationTop];
        [_tableView endUpdates];

    } else {
        //If not
        if (_selectedPath != indexPath){
            //delete the row that we selected last time
            if (_selectedPath != nil){
                pathToDelete = [NSIndexPath indexPathForRow:_selectedPath.row inSection:_selectedPath.section];
                [_tableView beginUpdates];
                [_tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:pathToDelete] withRowAnimation:UITableViewRowAnimationTop];
                [_tableView endUpdates];
            }

            //add new row in the section we selected
            _selectedPath = indexPath;
            [_tableView beginUpdates];
            [_tableView insertRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationTop];
            [_tableView endUpdates];
        }
    }
    [_tableView beginUpdates];
    [_tableView deselectRowAtIndexPath:indexPath animated:NO];
    [_tableView endUpdates];

    [_tableView reloadSections:[[NSIndexSet alloc] initWithIndex:pathToDelete.section] withRowAnimation:UITableViewRowAnimationMiddle];
    [_tableView reloadSections:[[NSIndexSet alloc] initWithIndex:_selectedPath.section] withRowAnimation:UITableViewRowAnimationMiddle];
    [_tableView endUpdates];
}

問題は begin & endUpdates メソッドにあると思いますが、どこが正確かわかりません。どんな手掛かり?ありがとう

4

1 に答える 1

0

beginUpdates単一の-を使用することで、これをはるかに簡単に行うことができますendUpdates。その中で削除と挿入を行うだけです。テーブルのデータ ソースを更新することを忘れないでください。そうしないと、アプリがクラッシュします。

お役に立てれば!

于 2012-12-17T16:05:48.423 に答える