• 通过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];
    }

  • 相关阅读:
    使用插件和不使用插件实现select的框
    利用sshtunnel实现跳板机的效果[嵌套ssh实现]
    laravel中get()与 first()区别、collection与stdClass的区别
    Laravel 安全:避免 SQL 注入
    MAC 终端走代理服务器
    Python--Virtualenv简明教程(转载https://www.jianshu.com/p/08c657bd34f1)
    Charles 如何抓取https数据包
    爬虫出现Forbidden by robots.txt(转载 https://blog.csdn.net/zzk1995/article/details/51628205)
    Scrapy框架的学习(6.item介绍以及items的使用(提前定义好字段名))转载https://blog.csdn.net/wei18791957243/article/details/86259688
    python xpath
  • 原文地址:https://www.cnblogs.com/piaojin/p/5213254.html
Copyright © 2020-2023  润新知