我有一個UITableView從NSFetchedResultsController接收數據。網絡調用偶爾會更新NSFetchedResultsController的數據。在每次從網絡調用更新數據後,我使用[tableView reloadData]更新UITableView以添加任何新項目。重新加載UITableView數據時無需重定位UITableViewCells
我的UI的一部分還可以使單元格水平重新定位。我希望這些單元格不會在每次刷新表格數據時重新定位,但不幸的是,[tableview reloadData]就是這樣做的。
什麼是在不重新定位行的情況下更新tableview中數據的理想方法?我應該重寫tableview的reloadData方法,並在那裏做一些幻想或者可能覆蓋tableview單元格layoutSubviews方法?
我喜歡這樣的單元位置:
CGRect newFrame = cell.frame;
newFrame.origin.x = -cell.frame.size.width;
cell.frame = newFrame;
後NSFetched結果控制器從網絡呼叫接收更多的數據,它會調用它的委託的方法:
其中要求實現代碼如下:的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;
}
你能更具體嗎?也許發佈一些關於如何重新定位的代碼,否則很難提出替代方案。 – Dima 2012-07-26 20:10:06
@Dima沒有太多的代碼可以發佈,因爲大部分代碼都發生在蘋果的'[tableView reloadData]'的實現中。我通過修改框架來移動單元格,當我調用'[tableView reloadData]''[tableView dequeueReusableCellWithIdentifier:CellIdentifier]'返回的單元格的原點位於(0,0)時。 – johnnyman727 2012-07-26 20:56:40
可能有更好的方法來做到這一點,但是如何爲單元創建自定義視圖然後讓單元監聽更新並自行更新? – Brian 2012-07-26 21:03:17