NSFetchedResultsController からデータを受け取る UITableView があります。NSFetchedResultsController のデータは、ネットワーク呼び出しによって時々更新されます。ネットワーク呼び出しからデータが更新されるたびに、新しい項目を追加するために [tableView reloadData] で UITableView を更新します。
私の UI の一部では、セルを水平方向に再配置することもできます。テーブルのデータが更新されるたびにこれらのセルが再配置されないようにしたいのですが、残念ながら [tableview reloadData] はそれを行います。
行の位置を変更せずにテーブルビューのデータを更新する理想的な方法は何ですか? テーブルビューの reloadData メソッドをオーバーライドして、そこで何か凝ったことをするか、テーブルビュー セルの layoutSubviews メソッドをオーバーライドする必要がありますか?
セルを次のように配置します。
CGRect newFrame = cell.frame;
newFrame.origin.x = -cell.frame.size.width;
cell.frame = newFrame;
NSFetched Results Controller がネットワーク呼び出しからさらにデータを受け取った後、デリゲートのメソッドを呼び出します。
- (void)controllerDidChangeContent:(NSFetchedResultsController *)controller {
[self.eventTableView reloadData];
}
tableview: cellForRowAtIndexPath:を呼び出し、デキューから返されたセルの起点は (0,0) です。
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"EventCell";
EventCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
[cellNib instantiateWithOwner:self options:nil];
cell = self.customCell;
}
// Configure the cell...
Event *event = [fetchedResultsController objectAtIndexPath:indexPath];
[cell configureCellWithEvent:event];
return cell;
}