UITableView的功能远比我们看到的要强大,可以任意的自定义UITableViewCell来满足我们的多种需求,比如缩略图。一下是我在使用UITableView的时候的一些心得,写在这里希望能帮到有需要的朋友,水平有限,经供参考。
UITableView中的cell是动态的,在使用过程中,会创建一个cell的池,根据每个cell的高度,以及屏幕高度(480)计算屏幕中需要显示几个cell,例如cell高度75.f,
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
return 75.f;
}
那么就有ceil(480/75.f) = 6个cell,这样,无论这个UITableView有多少行,只需要alloc 6个cell在池中,这6个cell将在第一次显示时被生成,需要制定一个cellIdentifier来区分你所需要的不同种类的cell,但是对于同一类型(比如MyCell)的只需要制定一个identifier。这样,当某行(indexpath.row)需要显示在屏幕中时,从池中取出一个cell(cell池应该是一个队列,也就是永远取池中的第一个cell),你可以对它进行操作,改变它的属性,但是不要改变它本身,放在对应的row上。当某行移出屏幕时,这个cell就重新放回池中,等待下一次的显示,或者把它显示在了即将出现的那个新的row上。
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString * aCellIdentifier = @"my_cell";
if (indexPath.row < [something count]) {
MyCell * cell = (MyCell *)[tableView dequeueReusableCellWithIdentifier:aCellIdentifier];
if (cell == nil) {
cell = [[[MyCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier: aCellIdentifier] autorelease];
cell.delegate = self;
}
cell.tag = indexPath.row;
//在这里改变cell的属性,但是不要改变它的子view和它本身
return cell;
}
return nil;
}
我在使用的过程中遇到的问题是:在定义MyCell的时候没有制定出里面需要显示的全部view,而是在改变cell属性的地方给它动态的添加对了view,导致在显示的时候出现问题。 这个问题目前我还说不太清原因,但是解决的办法就是正确的使用UITableViewCell,在cell初始化的时候生成它的全部子view。