zoukankan      html  css  js  c++  java
  • 通过xib加载UITableViewCell的新方式

    我们以前通常会这样做

    - (UITableViewCell  *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
         static  NSString  *CellIdentiferId = @"MomentsViewControllerCellID";
         MomentsCell  *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentiferId];
         if (cell == nil) {
            NSArray *nibs = [[NSBundle mainBundle]loadNibNamed:@"MomentsCell" owner:nil options:nil];
            cell = [nibs lastObject];
            cell.backgroundColor = [UIColor clearColor];
            

          };
            
         }
         return cell;

    }
    严重注意:我们之前这么用都没注意过重用的问题,这样写,如果在xib页面没有设置 重用字符串的话,是不能够被重用的,也就是每次都会重新创建,这是严重浪费内存的,所以,需要修改啊,一种修改方式是使用如下ios5提供的新方式:
    - (void)registerNib:(UINib *)nib forCellReuseIdentifier:(NSString *)identifier
    还有就是在xib页面设置好(ios5之前也可以用的)


    NSArray * nibObjects = [[NSBundle mainBundle] loadNibNamed:@"CustomTableCell" owner:nil options:nil];
    
    for (id obj in nibObjects)
    {
        if ([obj isKindOfClass:[CustomTableCell class]])
        {
            cell = obj;
            [cell setValue:cellId forKey:@"reuseIdentifier"];
            break;
        } 
    
    }
    还有更常用的
    -(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
    {
    return[self.items count];
    }
     
    -(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
    {
    UITableViewCell * cell =[tableView dequeueReusableCellWithIdentifier:@"myCell"];
    if(!cell)
    {
    cell =[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"myCell"];
    }
     
    cell.textLabel.text =[self.items objectAtIndex:indexPath.row];
     
    return cell;
    }
     
    但是现在有一种新的方式了,可以采用如下的方式
    采用registerNib的方式,并且把设置都放在了willDisplayCell方法中了,而不是以前我们经常用的cellForRowAtIndexPath
    这个方法我试了下,如果我们在xib中设置了 Identifier,那么此处的必须一致,否则会crash的
    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

    {
        MyCustomCell * cell = [tableView dequeueReusableCellWithIdentifier:@"myCell"];
        if (!cell)
        {
            [tableView registerNib:[UINib nibWithNibName:@"MyCustomCell" bundle:nil] forCellReuseIdentifier:@"myCell"];
            cell = [tableView dequeueReusableCellWithIdentifier:@"myCell"];
        }
        
        return cell;
    }

    - (void)tableView:(UITableView *)tableView willDisplayCell:(MyCustomCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
    {
        cell.leftLabel.text = [self.items objectAtIndex:indexPath.row];
        cell.rightLabel.text = [self.items objectAtIndex:indexPath.row];
        cell.middleLabel.text = [self.items objectAtIndex:indexPath.row];
    }

  • 相关阅读:
    一句话说明分布式与集群的区别以及什么是分布式集群
    docker Unhandled exception: Filesharing has been cancelled
    sqlserver查询数据的所有表名和行数
    docker push失败:denied: requested access to the resource is denied
    windows docker 共享文件权限设置
    ubuntu 16.4 docker 镜像加速
    fastreport 旋转 竖排
    基于Huggingface使用BERT进行文本分类的fine-tuning
    基于Embedding深度学习算法综述
    机器学习基础知识
  • 原文地址:https://www.cnblogs.com/piaojin/p/5213254.html
Copyright © 2011-2022 走看看