2009-09-01 14 views
4

UITableviewは、最初に表示されているセルのみを読み込む必要がありますか?私のテーブルビューは、初期にすべてのセルをロードしています。私は約1000行を使用しています。必要なときにのみセルをロードするようにしてください(ユーザーのスクロールダウンなど)。誰でもこれをやっている理由は何ですか?UITableViewはすべてのセルをロードしています

+1

明確にしてください。 A)NSLogステートメントを 'cellForRowAtIndexPath'メソッドに追加して、1000回呼び出されているか、B)遅いですし、メソッドが1000回呼び出されていると仮定していますか? – Jason

+0

アニメーションでデータをリロードすると、すべてのセルが読み込まれますが、アニメーションをわずか6行だけ使用する方法はありますか? [pTableView scrollRectToVisible:CGRectMake(0、0、1、1)アニメーション:いいえ]; // [pTableView reloadData];[pTableView reloadSections:[NSIndexSet indexSetWithIndex:0] withRowAnimation:animDirection]; –

+0

私は自分自身のプロジェクトでこの動作を見ています - [tableView reloadSections:...]はcellForRowAtIndexPathを実行するように見えます:*すべての行、目に見えるものだけではなく – andygeers

答えて

0

いくつかコードを記入してください。メソッド-tableView:cellForRowAtIndexPathは、潜在的なセルの新しい「スロット」が開かれたときにのみ呼び出されるため、最初は「すべてのセルを読み込む」ために何か重大なことをする必要があります。

おそらく、すべてのデータを最初にロードしていて、バッチでそれを実行したいということでしょうか?

0

これは正しいことです。必要なものだけを読み込む必要があります。 UITableViewさんのrowHeightさんは何ですか?それが極端に低い場合は、テーブルにすべてのセルをロードする必要があります。

これは問題ではない場合は、tableView:cellForRowAtIndexPath:コードを貼り付けることができますか?

+0

行あたり1ピクセル!)彼はまだそのメソッドの半分のセルをロードすることはできませんでした。確かに、この質問はデータをロードする時間に関係していなければなりませんか? – h4xxr

+0

AFAIK、tableViewを作成する唯一の方法:cellForRowAtIndexPath:ビューが最初に読み込まれるときに1000回呼び出されるのは、rowheightを0に設定することです。 –

1

私はcellForRowAtIndexPathがすべてのセルに対して最初に呼び出されていることを知っています。セルの高さは89

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 

static NSString *CellIdentifier = @"Cell"; 
UILabel *textName    = nil; 
UIImageView* image    = nil; 
unsigned int  DATA_TAG = 1001; 
unsigned int  IMG_TAG  = 1002; 

// Retrieve a cell is Available 
cell = [aTableView dequeueReusableCellWithIdentifier:CellIdentifier]; 

// Check if no new cell was available 
if (cell == nil) 
{ 
    cell = [[[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:CellIdentifier] autorelease]; 

    // Set the Accessory Data 
    textName = [[[UILabel alloc]initWithFrame:CGRectMake(cell.frame.origin.x, 80, cell.frame.size.width, 20)]autorelease]; 
    textName.tag     = DATA_TAG; 
    textName.textAlignment   = UITextAlignmentCenter; 
    textName.backgroundColor  = [UIColor clearColor]; 
    textName.highlightedTextColor = [UIColor colorWithRed:1.0 green:1.0 blue:0.9 alpha:1.0]; 
    textName.textColor    = [UIColor colorWithRed:0.0 green:0.0 blue:0.0 alpha:1.0]; 
    textName.lineBreakMode   = UILineBreakModeWordWrap; 

    [cell.contentView addSubview:textName]; 

    //Set the Image Data 
    image = [[[UIImageView alloc]initWithFrame:CGRectMake(cell.frame.origin.x, cell.frame.origin.y, cell.frame.size.width, 80)]autorelease]; 
    image.tag = IMG_TAG; 
    image.contentMode= UIViewContentModeScaleAspectFit; 
    [cell.contentView addSubview:image]; 

} 

Accessory* acc= [[AccessoryManager sharedManager].currentList objectAtIndex:indexPath.row]; 
if(acc == nil) 
    return cell; 


textName= (UILabel*)[cell.contentView viewWithTag:DATA_TAG]; 
textName.text= acc.accessoryName; 


image= (UIImageView*)[cell.contentView viewWithTag:IMG_TAG]; 
[image setImage:acc.accessoryImage];  
return cell; 
} 
+0

詳細を追加する場合は、「回答」をポストするのではなく、元の質問を編集する必要があります"自分の質問に... – h4xxr

+0

どこのセルが宣言されているのですか?なぜ[tableView dequeue ...]の代わりに[aTableView dequeue ..]を呼び出していますか? –

+0

@ Robの懸念をエコーし​​ます。また、参照用に ' - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath'を投稿してください。 – Jason

0

あなたはheightForRowAtIndexPathから例えば、cellForRowAtIndexPath自分自身を呼び出しているのですか?その場合、セルを作成して高さを決定する必要はありません。

関連する問題