- (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創(chuàng)建的cell
cell = [[UITableViewCellalloc]initWithStyle:UITableViewCellStyleDefaultreuseIdentifier:indentifier];
}
return cell;
}
UITableView內(nèi)部會(huì)有兩個(gè)NSMutableArray:visiableCells內(nèi)保存當(dāng)前顯示的cells掘宪,reusableTableCells保存可重用的cells或颊。
TableView顯示之初,reusableTableCells為空,那么[tableView dequeueReusableCellWithIdentifier:indentifier]返回nil秕豫。
開始的cell都是通過[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:indentifier] 來創(chuàng)建,而且cellForRowAtIndexPath只是調(diào)用最大顯示cell數(shù)的次數(shù)奉芦。 比如:有100條數(shù)據(jù),iPhone一屏最多顯示10個(gè)cell。
程序最開始顯示TableView的情況是:
用[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:indentifier]創(chuàng)建10次cell副渴,并給cell指定同樣的重用標(biāo)識(shí)(當(dāng)然,可以為不同顯示類型的cell指定不同的標(biāo)識(shí))信卡。并且10個(gè)cell全部都加入到visiableCells數(shù)組,reusableTableCells為空幔妨。
向下拖動(dòng)tableView,當(dāng)cell1完全移出屏幕鹦赎,并且cell1(它也是alloc出來的,原因同上)完全顯示出來的時(shí)候误堡。cell1加入到visiableCells古话,cell1移出visiableCells,cell1加入到reusableTableCells锁施。
接著向下拖動(dòng)tableView陪踩,因?yàn)閞eusableTableCells中已經(jīng)有值,所以當(dāng)需要顯示新的cell悉抵,cellForRowAtIndexPath再次被調(diào)用的時(shí)候膊毁,[tableView dequeueReusableCellWithIdentifier:indentifier]返回cell1。 cell1加入到visiableCells基跑,cell1 移出reusableTableCells;cell2移出 visiableCells描焰,cell2加入到reusableTableCells媳否。之后再需要顯示的Cell就可以正常重用了。
注意:配置Cell的時(shí)候一定要注意荆秦,對取出的重用的cell做重新賦值篱竭,避免遺留老數(shù)據(jù)。