2014-10-06 69 views
0

我想了解爲什麼awakeFromNib在我的代碼中被調用兩次。我目前有一個tableview,它有一個特殊的可壓縮單元格,它在表格的最後出現一次。第一個awakeFromNib在tableview被滾動到最後的特殊單元格時被調用(這很好,我相信,因爲tableview正在重用單元格)。但是,無論何時點擊單元格以展開單元格,都會再次調用awakeFromNib。爲什麼awakeFromNib從TableView中的單元格調用兩次?

任何人都可以向我解釋爲什麼awakeFromNib被調用兩次?而我如何才能讓它只被調用一次?

感謝

編輯**碼人要求

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

    if (indexPath.section >= (NSInteger)[self.trip.destinations count]) { 
     GuestCell *cell = (GuestCell*)[tableView dequeueReusableCellWithIdentifier:GuestCellIdentifier forIndexPath:indexPath]; 
     cell.selectionStyle = UITableViewCellSelectionStyleNone; 
     [cell setupCellForGuests:self.trip.guests]; 
     cell.guestExpanded = NO; 
     NSLog(@"RETURNING CELL"); 
     return cell; 
    } 

    // For all other sections 
    return [self prepareCardCellForIndexPath:indexPath forHeightCalc:NO]; 
} 


- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 
    if (indexPath.section >= (NSInteger)[self.trip.destinations count]) { 
     [self.tableView reloadRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationAutomatic]; 
    } 
} 
+0

分享您的代碼? – Bejibun 2014-10-06 19:12:59

+0

如果您只是實例化一個單元,則不應調用兩次,因此我們需要查看cellForRowAtIndexPath和didSelectRowAtIndexPath中的代碼。 – rdelmar 2014-10-06 19:16:46

+0

編輯您的帖子以包含展開單元格的代碼。你如何讓表格視圖知道單元格應該展開?它是動畫嗎? – 2014-10-06 19:39:13

回答

1

如果與筆尖的細胞中只有一個表,然後我的猜測是,它是與動畫。我沒有檢查tableview在動畫過程中如何處理單元格,但是爲tableview頭部請求另一個實例,然後執行動畫(例如淡入淡出) - 所以舊實例淡出,新的淡入淡出。至少這就是我如果您正在正確處理單元格,則認爲它的概率最高。

1

您正在爲正在展開的行重新加載動畫。表格視圖通過爲相同的索引路徑創建另一個單元格並將從舊單元格到新單元格的過渡動畫化來實現此目的。它創建您的細胞原型的第二個實例,因此第二個實例也收到awakeFromNib消息。如果你登錄self,你會發現第二次地址不同。

我不認爲你可以避免創建第二個單元實例(從而第二個awakeFromNib),除非你擺脫動畫。即使如此,我不確定它會重複使用舊的電池。

相關問題