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。

posted on 2011-10-10 11:40  辉夜君麻吕  阅读(1069)  评论(0)    收藏  举报