从xib中按标识符选择自定义UITableViewCell

时间:2010-08-15 16:40:09

标签: objective-c uitableview identifier

我尝试用不同的UITableViewCells填充我的UITableView。我试图通过标识符从XIB文件中选择3个UITableViewCells中的1个,但是我无法获得UITableViewCell标识符的值。

- (UITableViewCell *)tableView:(UITableView *)_tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{



MyTableViewCell *cell = (MyTableViewCell *) [tableView dequeueReusableCellWithIdentifier:@"CellTwo"];

 if(nil == cell){

  NSArray *topLevelObjects = [[NSBundle mainBundle] loadNibNamed:@"MyTableViewCell" owner:self options:nil];
  for (id currentObject in topLevelObjects) {
   if ([currentObject isKindOfClass:[MyTableViewCell class]]) {
    MyTableViewCell *tmpCell = (MyTableViewCell *) currentObject;
    if (tmpCell.identifier == @"CellTwo") {
     cell = (MyTableViewCell *) currentObject;     
    }
    [tmpCell release];
    break;
   }
  } 
 }

 cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;

 return cell;}

1 个答案:

答案 0 :(得分:0)

我通过为每个UITableViewCell创建一个子类来解决这个问题。当您对类类型进行比较时,可以输入它的单元格类型:

        cell = (FooterTableViewCell *)[tableView dequeueReusableCellWithIdentifier:@"footerTableViewCell"];

        if (cell == nil){

            NSArray *topLevelObjects = [[NSBundle mainBundle] loadNibNamed:@"CommonTableViewCell" owner:nil options:nil];

            for (id currentObject in topLevelObjects){
                if ([currentObject isKindOfClass:[FooterTableViewCell class]]){
                    cell = (FooterTableViewCell *)currentObject;
                    return cell;
                }
            }
        }

我有一些表重用完全相同类型的单元格格式,我希望将它们放在一个可以随时更改的公共XIB中。在该控制器的.h中,我简单地为三种单元格类型中的每一种声明了三个UITableViewCell子类。