nib项目中的CellForRowAtIndexPath

时间:2014-12-17 21:00:08

标签: ios objective-c uitableview nib

我在我的项目中实现了CellForRowAtIndexPath方法。

看起来像这样:

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


    static NSString *cellIdentifier = @"StackTableViewCell";

    Target *target = [self.fetchedResultController objectAtIndexPath:indexPath];

    StackTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier];

    if (!cell)
    {
        NSArray *topLevelObjects = [[NSBundle mainBundle] loadNibNamed:@"StackTableViewCell" owner:self options:nil];
        cell = [topLevelObjects objectAtIndex:0];
    }

    cell.cellLabel.text = target.body;

    cell.cellLabel.font = [UIFont fontWithName:@"Candara-Bold" size:20];[UIFont fontWithName:@"Candara-Bold" size:20];

    // Configure the cell...

    return cell;
}

但有些事情困扰着我,而且我并不真正理解这一部分发生了什么(我从一些教程中看到了它):

if (!cell)
        {
            NSArray *topLevelObjects = [[NSBundle mainBundle] loadNibNamed:@"StackTableViewCell" owner:self options:nil];
            cell = [topLevelObjects objectAtIndex:0];
        }

有人可以帮我理解这个吗?

谢谢!

2 个答案:

答案 0 :(得分:2)

如果表视图没有可重用的单元格,请加载StackTableViewCell.xib中存在的对象。假设您在顶级定义的第一个可以被实例化为您想要的单元格类型。

答案 1 :(得分:0)

if (!cell)
        {
            NSArray *topLevelObjects = [[NSBundle mainBundle] loadNibNamed:@"StackTableViewCell" owner:self options:nil];
            cell = [topLevelObjects objectAtIndex:0];
        }

当您的单元格为零时,您正试图从笔尖加载单元格。

通常,我喜欢这样:

ViewDidLoad中的

[self.tableView registerNib:[UINib nibWithNibName:@"StackTableViewCell" bundle:nil] forCellReuseIdentifier:cellIdentifier];

所以在tableView:cellForRowAtIndexPath方法中你可以得到单元格,你不需要检查它是否为零,因为它总是返回单元格

StackTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier];