由XCode嚮導創建的主 - 明細項目包含tableView:cellForRowAtIndexPath:
的實現,該實現調用dequeueReusableCellWithIdentifier:forIndexPath:
,然後調用自定義方法configureCell
以用有效數據填充單元格控件,然後將單元格返回給調用者。據我所知,這是如何表知道如何繪製其單元格內容。tableView:cellForRowAtIndexPath:應該如何使用?
我不明白的是如何使用它,當我想從我的代碼中獲取單元格。它甚至應該被我的代碼調用,還是它只是表框架本身使用的回調?例如,如果我只想更改單元格中一個標籤的文本,我認爲我可以調用tableView:cellForRowAtIndexPath:
,並在生成的單元格對象控件中更改我需要的內容。但調用tableView:cellForRowAtIndexPath:
實際上會生成一個新的單元對象(可能會重用未使用的單元對象池中的一個),並使用數據填充所有控件,如圖像瀏覽和標籤。當我想要更改一個標籤時,這對我的表現並不好。
因此,也許我可以從tableView:cellForRowAtIndexPath:
中刪除configureCell
?但是,如果調用[table reloadData]
時如何確保所有單元格內容將被系統重新繪製?
P.S. 的XCode 7嚮導創建這種代碼:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell" forIndexPath:indexPath];
NSManagedObject *object = [[self fetchedResultsController] objectAtIndexPath:indexPath];
[self configureCell:cell withObject:object];
return cell;
}
// Then later in controller:didChangeObject:atIndexPath:forChangeType:newIndexPath:
case NSFetchedResultsChangeUpdate:
[self configureCell:[tableView cellForRowAtIndexPath:indexPath] withObject:anObject];
break;
configureCell
被稱爲這裏的兩倍。對我來說似乎是無意義的。我希望至少有人爲代碼編寫巫師知道這應該如何工作。
此調用僅由表框架使用。你可以調用reloadRowsAtIndexPaths並只發送一行來更新一個特定的行。 –