如何使用Custom Static UITableViewCells在单元格中显示图像?

时间:2013-07-26 16:18:41

标签: ios uitableview

我有5个静态单元格的tableview。它们是静态的,因为在tableview中总是只有5个。

Custom Cell

我想要他们自定义单元格,因为我需要在每个单元格中居中UIImageViews,因为它们将具有按钮图像而没有其他内容。我创建了一个带有UIImageView插座的MyCustomCell类,并将其连接到插座。

Cell Xib

然后在tableview控制器类中我做了这个:

#pragma mark - TableView Cell Methods
- (UITableViewCell*)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    MyCustomCell *cell = [[MyCustomCell alloc] init];

    switch (indexPath.row) {
        case 0:
            // Use Custom Cell
            cell.thumbnailImageView.image = [UIImage imageNamed:@"button.png"];
            break;
        case 1:
            [cell setAccessoryType:UITableViewCellAccessoryDisclosureIndicator];
            // USE IMAGE INSTEAD
            cell.thumbnailImageView.image = [UIImage imageNamed:@"button1.png"];
            break;
        case 2:
            cell.thumbnailImageView.image = [UIImage imageNamed:@"button2.png"];
            break;
        case 3:
            cell.thumbnailImageView.image = [UIImage imageNamed:@"button3.png"];
            break;
        case 4:
            cell.thumbnailImageView.image = [UIImage imageNamed:@"Search.png"];
            break;
        default:
            break;
    }
    return cell;
}

MyCustomCell.m:

- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier{
    self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
    if (self) {

    }
    return self;
}

- (void)setSelected:(BOOL)selected animated:(BOOL)animated{
    [super setSelected:selected animated:animated];

    // Configure the view for the selected state
}

细胞显示空白。当我使用UITableViewCell代替MyCustomCell时,它工作正常。所以我不确定为什么它现在失败了。

2 个答案:

答案 0 :(得分:2)

我没有看到您在MyCustomCell.m中引用自定义单元格的.xib文件的任何位置。你必须告诉该类要加载哪个.xib文件。

查看以下教程,该教程演示了一种从.xib文件加载单元格的方法(在自定义单元格类中):Creating custom UITableViewCell from XIBs – step by step tutorial

此问题显示了另一种方法(cellForRowAtIndexPath内): how to create custom tableViewCell from xib

此外,如果您在cellForRowAtIndexPath中重新创建静态单元格,则不会使用静态单元格。您将丢失在Interface Builder中设置的任何内容。考虑放弃静态单元格。您可以在设置图像的同一位置设置所有单元格属性。

最后,如果您放弃静态单元格方法,请考虑在与表视图相同的视图控制器中创建自定义单元格(标准UITableView具有用于此目的的占位符单元格)并将自定义单元格出列标准办法。然后,没有额外的.xib加载,因此它将自动处理。有关creating a custom table view cell的详细信息,请参阅我之前的回答。

答案 1 :(得分:0)

如果您使用静态单元格,只需为每个单元格创建IBOutlets,然后执行以下操作:

- (UITableViewCell*)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
     MyCustomCell *cell = nil;

    switch (indexPath.row) {
         case 0:
             cell0.thumbnailImageView.image = [UIImage imageNamed:@"button.png"];
             cell = cell0;
             break;
          case 1:
             //you can set the accessory type in the storyboard
             [cell1 setAccessoryType:UITableViewCellAccessoryDisclosureIndicator];
              cell1.thumbnailImageView.image = [UIImage imageNamed:@"button1.png"];
             cell = cell1;
            break;
           //etc
    }
    return cell;
}