1

20 個のセルがUITableViewあり、最初のセルを表示し、バックグラウンドでさらにデータをロードします。データがロードされた後、元の 20 個のセルの前に 10 個のセルを挿入します。UITableView元の最初のセルを表示したままにしたい(他の手段は、挿入後に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 に答える