1

我有UITableView20 个单元格,并显示第一个单元格,我在后台加载更多数据,加载数据后,我在原始 20 个单元格之前插入 10 个单元格。我想要UITableView仍然显示原始的第一个单元格(其他方式在插入后显示 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但表格仍然滚动)和向下(可能由 引起scrollToRowAtIndexPath)2 次。

4

1 回答 1

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

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

于 2012-12-12T10:17:36.657 回答