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 回答