1

一度にUITableView5行しか表示できない高さ180pxのテーブルビューにはカスタムセルが含まれています。ただし、6 つのセルがあります。つまり、6 番目のセルは、スクロールを使用している場合にのみ表示され、次のようにすべてのセルをループしようとすると、次のようになります。

  for (int row = 0; row < [self.autoTableView numberOfRowsInSection:0]; row++)  {

    NSIndexPath* cellPath = [NSIndexPath indexPathForRow:row inSection:0];
    UITableViewCell *cell = [self.autoTableView cellForRowAtIndexPath:cellPath];

    if(!cell)
        NSLog(@"NULL %i", row);

 }

実行時に、スクロールを行わなかった場合NSLog、コンソール ウィンドウに「 」というステートメントが表示されます。下にスクロールしてNULL 5最後のセルを表示すると、「 」というNSLogステートメントが表示されNULL 0ます。NSLog上下にスクロールして、すべてのセルが既に作成されているのに、なぜこれが起こるのですか?

cellForRowAtIndexPathコードは次のとおりです。

static NSString *customCellIdentifier = @"customCell";
EditableTableDataRow *cell = nil;

cell = (EditableTableDataRow *)[tableView dequeueReusableCellWithIdentifier:customCellIdentifier];
if (cell == nil)
{
    cell = [[[EditableTableDataRow alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:customCellIdentifier itemPadding:0 scaleToFill:NO] autorelease];
}

次に、このカスタム セル内にあるラベルとテキスト フィールドでさまざまなことを行い、最後に:

...

 return cell;

よろしくお願いします。

4

2 に答える 2

3

これがデフォルトの動作です。セルが表示されていない場合、セルはメモリから割り当て解除されます。それらに対して行うすべての変更は、メソッドで行う必要がありますcellForRowAtIndexPath:。それが、それらが作成されるときです。データをメモリにロードして、セルが作成されるまでにすぐにいっぱいになるようにします。それがスムーズなスクロールを実現する方法です。

于 2012-04-18T06:17:08.257 に答える
0

作成されるセルの数は、ビューに表示されているセルの数によって異なります。あなたの場合、5つのセルのみが作成されます。

セル = (EditableTableDataRow *)[tableView dequeueReusableCellWithIdentifier:customCellIdentifier];

この行により、テーブルビューは作成されたセルを再利用します。したがって、下にスクロールすると、最初のセルが消えて、最初の行に作成されたセルが 6 行目に使用されるようになります。

それが役に立てば幸い。

于 2012-04-18T06:07:13.700 に答える