自定义UITableViewCell仅绘制一个单元格

时间:2010-11-03 15:03:28

标签: iphone objective-c ios uitableview

我想显示自定义单元格,但我的代码只显示一个自定义表格单元格。我做错了什么?

我在UIView中设置了一个UIViewController nib和我的UITableView。在nib中还有一个UITableViewCell,其类是CustomCell(UITableViewCell的子类)。 UITableView和Cell都是@sythesized IBOutlet @properties。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    NSString *CellIdentifier  = @"CellIdentifier";
    CustomCell *cell = (CustomCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier]; // CustomCell is the class for standardCell
    if (cell == nil) 
    {
        cell = standardCell; // standardCell is declared in the header and linked with IB
    }
    return cell;
}

4 个答案:

答案 0 :(得分:3)

您可以使用以下示例代码;


- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    NSString *CellIdentifier  = @"CellIdentifier";
    CustomCell *cell = (CustomCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier]; // CustomCell is the class for standardCell
    if (cell == nil) 
    {
    NSArray *objectList = [[NSBundle mainBundle] loadNibNamed:@"CustomCell" owner:self options:nil];
    for (id currentObject in objectList) {
        if([currentObject isKindOfClass:[UITableViewCell class]]){
            cell = (CustomCell*)currentObject;
            break;
        }
    }
    }
    return cell;
}

答案 1 :(得分:2)

每次dequeueReusableCellWithIdentifier返回nil

时,您都应该创建一个新的单元格

通常看起来应该是

...
if (cell == nil)
{
  cell = [[[NSBundle mainBundle] loadNibNamed:@"MyCell" owner:nil options:nil] objectAtIndex:0]
}
...

P.S。而不是objectAtIbndex:,您可以遍历返回的数组并使用isKingOfClass:[MyCell class]来查找单元格

答案 2 :(得分:2)

cell必须为给定的索引路径设置其内容,即使单元格本身已出列,例如:

if (cell == nil) {
   /* instantiate cell or load nib */
   cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:nil] autorelease];
}

/* configure cell for a given index path parameter */
if (indexPath.row == 123)
    cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
else 
    cell.accessoryType = nil;
/* etc. */

return cell;

答案 3 :(得分:0)

如果cell == nil,则需要实例化新的UITableViewCell

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    NSString *CellIdentifier  = @"CellIdentifier";
    CustomCell *cell = (CustomCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];

    if (cell == nil) 
    {
        // Instantiate a new cell here instead of using the "standard cell"
        CustomCell *cell= [[[CustomCell alloc] init reuseIdentifier:CellIdentifier] autorelease];

        // Do other customization here

    }
    return cell;
}