从cellForRowAtIndexPath内部创建自定义UITableView表格单元格

时间:2012-06-27 14:50:33

标签: ios5 uitableview

非常好奇如何从tableView:cellForRowAtIndexPath:中处理自定义表格单元格。

我在viewDidLoad中实例化一个自定义表格单元格。我的问题是,当没有可重用的单元格时,如何处理cellForRowAtIndexPath中的情况?例如,返回搜索结果时。如果需要,如何创建新的自定义单元格?我在下面列出了相关的方法。

由于

 -(void)viewDidLoad
 {
   [super viewDidLoad];

   //Load custom table cell
     UINib *customCellNib = [UINib nibWithNibName:@"CustomItem" bundle:nil];

   //Register this nib, which contains the cell
    [[self tableView] registerNib:customCellNib forCellReuseIdentifier:@"CustomItemCell"];


   //.... More stuff here

  }


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

     CustomItemCell *cell =
    [tableView dequeueReusableCellWithIdentifier:@"CustomItemCell"];

     // If there is no reusable cell of this type, create a new one
     if (!cell) {


       //Is this right?
       cell = [[CustomItemCell alloc] init];

     }




          //Set up cell with data here...



    return cell;
 }

1 个答案:

答案 0 :(得分:0)

我最终通过访问主包来寻找自定义表格单元格nib文件来解决这个问题。当我们找到自定义表格单元格类时,我们将iVar“单元格”分配给该对象。

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

   static NSString *cellID = @"CustomItemCell";
   CustomItemCell *cell = [tableView dequeueReusableCellWithIdentifier:cellID];

   // If there is no reusable cell of this type, create a new one

   if(cell == nil){


    NSArray *nibObjects = [[NSBundle mainBundle]loadNibNamed:@"CustomCell" owner:nil options:nil];
    for (id currentObject in nibObjects) {
        if([currentObject isKindOfClass:[CustomItemCell class]])
        {
            cell = (CustomItemCell *)currentObject;

        }


    }

  } 
   //Assign data to cell here   
}