3

我想创建一个自定义 UITableViewCell 子类,它使用 URL 连接异步加载内容。我有一个处理所有这些的 UITableViewCell 子类和一个定义单元格布局的 Nib 文件,但是我无法将两者链接起来。这是我在中使用的代码tableView:cellForRowAtIndexPath

static NSString *FavCellIdentifier = @"FavCellIdentifier";

FavouriteCell *cell = [tableView dequeueReusableCellWithIdentifier:FavCellIdentifier];

if (cell == nil)
{
    cell = [[[FavouriteCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:FavCellIdentifier] autorelease];
}

cell.requestURL = [NSURL URLWithString:[NSString stringWithFormat:@"%@?%@=%i", URL_GET_POST_STATUS,
                                           URL_PARAM_SERIAL,
                                           [[self.favourites objectAtIndex:indexPath.row] intValue]]];

return cell;

这为 UITableViewCell 子类提供了一个请求 URL,该子类处理setRequestURL方法中的加载。

在 FavouriteCell 类中,我保持initWithStyle:reuseIdentifier:方法不变,在 Nib 中,我将 FavCellIdentifier 设置为标识符,将 FavouriteCell 设置为类。现在如何让 FavouriteCell 类加载 Nib?

4

1 回答 1

7

为了使用 nib/xib 文件,您将不得不以不同的方式实例化FavouriteCell

试试这个:

  1. 确保您已将您的类型更改UITableViewCell为子类,而不是xibFavouriteCell中的默认值。UITableViewCell通过以下方式执行此操作:
    • 单击 Interface Builder 对象窗格中的单元格。
    • 然后,转到 Identity Inspector 选项卡并确保 Custom Class lists 下的 Class 选择FavouriteCell
  2. File's Owner将属性更改为UIViewController您要显示自定义的位置UITableViewCell(与步骤#1 几乎相同的过程)。
  3. IBOutlet将类型的属性添加FavouriteCell到您的UIViewController. 给它起任何你喜欢的名字(我会叫它cell)。
  4. 回到 的 xib 中,将File's Owner 中属性UITableViewCell的 IBOutlet 连接到您的自定义.cellUITableViewCell
  5. 使用此代码以编程方式加载单元格:

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

    static NSString *CellId = @"FavCellId";
    FavouriteCell *cell = [tableView dequeueReusableCellWithIdentifier:CellId];
    if (!cell) {
        // Loads the xib into [self cell]
        [[NSBundle mainBundle] loadNibNamed:@"FavouriteCellNibName" 
                                      owner:self 
                                    options:nil];
        // Assigns [self cell] to the local variable
        cell = [self cell];
        // Clears [self cell] for future use/reuse
        [self setCell:nil];
    }
    // At this point, you're sure to have a FavouriteCell object
    // Do your setup, such as...
    [cell setRequestURL:[NSURL URLWithString:
                  [NSString stringWithFormat:@"%@?%@=%i", 
                      URL_GET_POST_STATUS, 
                      URL_PARAM_SERIAL, 
                      [[self.favourites objectAtIndex:indexPath.row] intValue]]
     ];
    return cell;
}
于 2012-05-02T12:09:44.370 回答