Cell重用中为什么创建屏幕可显示cell数+1的cell

2017-06-27  本文已影响56人  test158888
重用的写法如下:
//设置单元格(cell)  indexPath :单元格当前所在位置-哪一组的哪一行
  - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{   //定义重用标识
    static NSString *identifier = @"cell" ;
    //identifier: 因为一个表视图中可能存在多种样式的单元格(cell),所以要相同样式的单元格放到同一个集合里面,并且为这个                集合绑定标识符,当我们需要用到某种样式的单元格的时候,就根据不同的标识符,从不同的集合中找寻单元格.
   //该方法会先去缓存池中寻找对应的cell 如果缓存池中没有,就看有没有注册对应的cell,如果也没有注册,就看storyboard中有没           有绑定对应标识的cell 都没有的话就创建
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:identifier] ;

    if (!cell) {
   //创建cell的时候需要标示符(Identifier)是因为,当该cell离开屏幕的时候需要根据标示符放到对应的集合中.
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:@"cell"];
            
   return cell ;
}

在iOS6之后系统加入了一种单元格注册的方法.
[self.tableView registerClass:[UITableViewCell class] forCellReuseIdentifier: identifier] ;
这个方法的作用是,当我们从重用队列中取cell的时候,如果没有,系统会帮我们创建我们给定类型的cell,如果有,则直接重用. 这种方式cell的样式为系统默认样式.
在设置cell的方法中只需要:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    // 重用队列中取单元格 由于上面已经注册过单元格,系统会帮我们做判断,不用再次手动判断单元格是否存在
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier: identifier forIndexPath:indexPath] ;
    return cell ;
}
上一篇 下一篇

猜你喜欢

热点阅读