現在 45 個の項目を含む配列からデータを取り込んでいるテーブル ビューがあります。目標は、最初に 20 個を表示し、ユーザーがテーブル ビューの一番下までスクロールしたときにさらに 20 個のアイテムを段階的に表示することです。
セルに情報を入力するメソッドを次に示します。
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
UITableViewCell* cell = [tableView dequeueReusableCellWithIdentifier:@"cell"];
if(!cell){
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:@"cell"];
}
cell.textLabel.text = [[listings objectAtIndex:indexPath.row] objectForKey:@"listingName"];
return cell;
}
テーブルビューの長さを決定する方法は次のとおりです。
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
if (listings.count < 20){
return listings.count;
}
return tableViewSize;
}
tableViewSize
は、値 20 でインスタンス化するインスタンス変数です。次のメソッドを使用して、ユーザーが一番下までスクロールするたびに値を 20 ずつ増やします。
- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath{
if(indexPath.row == (listings.count - 1)){
tableViewSize += 20;
if(tableViewSize > listings.count){
tableViewSize = listings.count;
}
}
[tableView reloadData];
}
問題は非常に奇妙です。後者のメソッドを含めるtableView:willDisplayCell:forRowAtIndexPath:
と、テーブル ビューには 1 つのセルしか表示されません (現時点ではすべてのオブジェクトが同じであるため、配列内のどのオブジェクトかわかりません。必要に応じて調べることができます)。後者の方法をコメントアウトすると、テーブル ビューに 20 個のセルが正しく表示されます。
このメソッドがテーブルビューをこのように動作させる理由を誰かが知っていますか?