- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
static NSString *indentifier =@"Cell";
UITableViewCell *cell = [tableViewdequeueReusableCellWithIdentifier:indentifier];
if (!cell) {
// cell = [[NSBundle mainBundle]loadNibNamed:@"UCFBackMoneyCell" owner:self options:nil][0];//用xib創建的cell
cell = [[UITableViewCellalloc]initWithStyle:UITableViewCellStyleDefaultreuseIdentifier:indentifier];
}
return cell;
}
UITableView內部會有兩個NSMutableArray:visiableCells內保存當前顯示的cells,reusableTableCells保存可重用的cells。
TableView顯示之初,reusableTableCells為空,那么[tableView dequeueReusableCellWithIdentifier:indentifier]返回nil。
開始的cell都是通過[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:indentifier] 來創建,而且cellForRowAtIndexPath只是調用最大顯示cell數的次數。 比如:有100條數據,iPhone一屏最多顯示10個cell。
程序最開始顯示TableView的情況是:
用[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:indentifier]創建10次cell,并給cell指定同樣的重用標識(當然,可以為不同顯示類型的cell指定不同的標識)。并且10個cell全部都加入到visiableCells數組,reusableTableCells為空。
向下拖動tableView,當cell1完全移出屏幕,并且cell1(它也是alloc出來的,原因同上)完全顯示出來的時候。cell1加入到visiableCells,cell1移出visiableCells,cell1加入到reusableTableCells。
接著向下拖動tableView,因為reusableTableCells中已經有值,所以當需要顯示新的cell,cellForRowAtIndexPath再次被調用的時候,[tableView dequeueReusableCellWithIdentifier:indentifier]返回cell1。 cell1加入到visiableCells,cell1 移出reusableTableCells;cell2移出 visiableCells,cell2加入到reusableTableCells。之后再需要顯示的Cell就可以正常重用了。
注意:配置Cell的時候一定要注意,對取出的重用的cell做重新賦值,避免遺留老數據。