通过xib加载UITableViewCell的新方式

mac2022-06-30  20

我们以前通常会这样做

- (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之前也可以用的) 如果忘了在xib中设置,还有一种方式   http://stackoverflow.com/questions/413993/loading-a-reusable-uitableviewcell-from-a-nib 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];}

转载于:https://www.cnblogs.com/piaojin/p/5213254.html

相关资源:JAVA上百实例源码以及开源项目
最新回复(0)