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];
    }

  • 相关阅读:
    go 代理
    mongo创建用户
    博客搬家&留言板
    noip2020 SD选手迷惑行为大赏
    noip2020游记
    P4174 [NOI2006] 最大获利
    P3327 [SDOI2015]约数个数和
    P5069 [Ynoi2015]纵使日薄西山
    P3747 相逢是问候
    HDE6315 Naive Operations
  • 原文地址:https://www.cnblogs.com/piaojin/p/5213254.html
Copyright © 2011-2022 走看看