2012-04-18 11 views
1

私はの高さが180pxです。一度に5行しか表示できないため、テーブルビューにはカスタムセルが含まれています。実行時にカスタムUITableViewCellsは、表示されていないときは常にnullです。

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

} 

私はスクロールをしなかった場合、:しかし、私は6個の細胞を持っている、それは私がこのようにすべてのセルをループしようとすると、第六セルがスクロールし、使用している場合にのみ表示されることを意味しますコンソールウィンドウに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; 

は事前にどうもありがとうございました。

答えて

0

作成されるセルの数は、ビューに表示されているセルの数によって異なります。あなたのケースでは5つのセルしか作成されません。

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

この行によって、作成されたセルが再利用されます。したがって、最初のセルをスクロールダウンすると、最初の行の作成されたセルが6番目の行に使用されるように消えます。

願っています。

3

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

+0

だから、すべてのセルをループし、ループ内の各セルに変更を加える方法はありますか? – JAHelia

+0

繰り返しセルについては考えないでください。細胞を移入する配列の反復について考えてみましょう。それは更新する必要があります。次に、セルはその配列から読み込み、すべてのデータを取得します。 –

+1

しかし、私はすべてのセルをループして(たとえば)セルの背景色を変更する必要があるので、この場合は配列とは何も関係ありません。 – JAHelia

関連する問題