2013-01-19 54 views
0

移動行之後,我更改了與單元格關聯的biz的行號和引號。如果cellForRowAtIndexpath被再次調用,那麼事情就會起作用。如何在移動行之後再次調用cellForRowAtIndexPath?

enter image description here

這是我的代碼

- (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)sourceIndexPath toIndexPath:(NSIndexPath *)destinationIndexPath 
{ 
    NSMutableArray * mutableBusinessBookmarked= self.businessesBookmarked.mutableCopy; 
    Business *bizToMove = mutableBusinessBookmarked[sourceIndexPath.row]; 
    [mutableBusinessBookmarked removeObjectAtIndex:sourceIndexPath.row]; 
    [mutableBusinessBookmarked insertObject:bizToMove atIndex:destinationIndexPath.row]; 
    self.businessesBookmarked=mutableBusinessBookmarked; 
    [self rearrangePin]; 
    [tableView moveRowAtIndexPath:sourceIndexPath toIndexPath:destinationIndexPath]; 
    [self.table reloadData]; 
} 
  1. 我不知道我這樣做是正確的。我更新了數據模型並致電moveRowAtIndexPath
  2. [tableView moveRowAtIndexPath...似乎沒有做任何事情。無論我是否打電話,行都會移動。
  3. 我不認爲調用self.table reloadData是明智的。但是,我想更新左側的號碼。儘管撥打self.table reloadData,但仍不會撥打cellForRowAtindexpath

回答

3

我建議將您的單元配置邏輯移入單獨的方法。然後在moveRowAtIndexPath中,您可以通過直接調用此方法來更新可見單元格。例如:

- (void)configureCell:(UITableViewCell *)cell 
{ 
    NSIndexPath *indexPath = [self.tableView indexPathForCell:cell]; 
    // Get data for index path and use it to update cell's configuration. 
} 

- (void)reconfigureVisibleCells 
{ 
    for (UITableViewCell *cell in self.tableView.visibleCells) { 
     [self configureCell:cell]; 
    } 
} 

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"MyCellIdentifier"]; 
    [self configureCell:cell]; 
    return cell; 
} 

- (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)sourceIndexPath toIndexPath:(NSIndexPath *)destinationIndexPath 
{ 
    // Update data model. Don't call moveRowAtIndexPath. 
    [self reconfigureVisibleCells]; 
} 

- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    [self configureCell:cell]; 
} 

一些其他評價:

  1. cellForRowAtIndexPath當表視圖需要顯示一個新的小區才調用。它永遠不會被稱爲可見的單元格。
  2. 當您的數據模型發生變化並且您需要將更改傳播到UI時,可以調用moveRowAtIndexpath。您的情況與此相反,即UI正在將更改傳播到您的數據模型。所以你不會撥打moveRowAtIndexPath
  3. 我總是重新配置willDisplayCell中的單元格,因爲有些情況下表格視圖會在cellForRowAtIndexPath之後覆蓋您的自定義設置。
相關問題