如何在insertRowsAtIndexPaths之后保持当前单元格显示

时间:2012-12-12 09:41:48

标签: objective-c ios uitableview

我有一个UITableView有20个单元格,并显示第一个单元格,我在背景上加载了更多数据,加载数据后,我在原始的20个单元格之前插入了10个单元格。我希望UITableView仍然显示orignal第一个单元格(其他方法在插入后显示No.11单元格)。我使用了以下代码:

// before insert 10 item, the UITableView(_contentTable) has 20 cell and displaying the first cell
// newItems is an NSArray has 10 item.
// insert 10 data to the data source (_contents)
if ( [newItems count] )
{
    for ( NSUInteger i = [newItems count]; i > 0; --i )
    {
        [_contents insertObject:[newItems objectAtIndex:i - 1] atIndex:0];
    }
}
// make the indexPaths for insertRowsAtIndexPaths
NSMutableArray *indexPaths = [[NSMutableArray alloc] initWithCapacity:newItems.count];
for (NSUInteger i = 0; i<newItems.count; ++i) {
    [indexPaths addObject:[NSIndexPath indexPathForRow:i inSection:0]];
    }
    [_contentTable beginUpdates];
    // insert cell
    [_contentTable insertRowsAtIndexPaths:indexPaths withRowAnimation:UITableViewRowAnimationNone];
    // scrall to number 10 cell, make the UITableView looks like nothing happen on the background
    NSIndexPath *path = [NSIndexPath indexPathForRow:10 inSection:0];
    [_contentTable scrollToRowAtIndexPath:path atScrollPosition:UITableViewScrollPositionTop animated:NO];

    [_contentTable endUpdates];

该代码的问题是该表将向上滚动(可能由insertRowsAtIndexPaths导致,我使用参数UITableViewRowAnimationNone但表仍然滚动)和向下(可能由{{1}引起})2次。

1 个答案:

答案 0 :(得分:0)

// scrall to number 10 cell, make the UITableView looks like nothing happen on the background
NSIndexPath *path = [NSIndexPath indexPathForRow:10 inSection:0];
[_contentTable scrollToRowAtIndexPath:path atScrollPosition:UITableViewScrollPositionTop animated:NO];

如果您不想滚动表视图,可以删除上面的代码。