3

我通过以下步骤在我的 iPhone 应用程序中创建了一个自定义表格视图单元格。

  1. 在我的故事板中,我创建了一个示例单元格,将 aUILabel和 a拖入其中UIImageView
  2. 添加了新文件,我创建了UITableViewCell.
  3. 在 Interface Builder 中,我选择了我的单元格并将其类分配为我刚刚在步骤 2 中创建的类。
  4. 在我的自定义表格视图单元的代码中,我创建了两个 IBOutlet 属性并将它们连接到我的UILabelUIImageView故事板中。
  5. 我的自定义表格视图单元格还包括一个方法,它接收另一个对象,从中设置自己的属性:

    -(void)populateWithItem:(PLEItem *)item
    {
        if (item.state == PLEPendingItem) {
            status.text = @"Pending upload..."; //status is a UILabel IBOutlet property
        }
        else if(item.state == PLEUploadingItem)
        {
            status.text = @"Uploading...";
        }
    
        imageView.image = [UIImage imageWithContentsOfFile:item.path]; //imageView is the UIImageView IBOutlet property
    }
    

这个方法是从我的tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath as follows:

    PLEPendingItemCell* cell = (PLEPendingItemCell*)[tableView dequeueReusableCellWithIdentifier:item_id];
    if (cell == nil) {
        cell = [[PLEPendingItemCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:pending_id];
    }

    [cell populateWithItem:((PLEItem*)[itemList objectAtIndex:indexPath.row])];

    return cell;

问题是单元格总是显示为空。我在 populateWithItem 中设置了一个断点,并意识到该方法中的状态UILabel和图像UIImageView都为零。

IB不应该初始化这些吗?如果没有,我应该在哪里这样做?

4

1 回答 1

4

如果您在故事板中设置单元格,则始终需要使用创建单元格,tableView:dequeueReusableCellWithIdentifier:forIndexPath:因为这是故事板创建单元格并连接视图的地方。

直接使用其构造函数创建单元格,如在您的示例代码中,不会从情节提要、笔尖等加载任何子视图。您创建的类对情节提要原型单元格一无所知。

于 2013-01-15T00:50:02.390 回答