我有一个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次。
答案 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];
如果您不想滚动表视图,可以删除上面的代码。