在创建我的UITableViewCells时,为什么init永远不会被调用? (导致空白细胞?)

时间:2013-04-14 17:21:11

标签: ios objective-c uiview uitableview

在我的UITableView中,我最近改变了单元格的结构,从以前只是将UILabels放在单元格的contentView中,将两个UIViews(CellFront和CellBack,在另一个之上)添加到contentView中(所以我可以实现通过滑动顶部一个并露出下部一个滑动效果并将UILabels添加到顶部UIView。

然而,现在,无论出于何种原因,细胞永远不会被初始化,因此我的UITableView充满了空白细胞。

我的单元格创建如下(ArticleCell是UITableViewCell的子类):

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = nil;

    ArticleInfo *articleInfo = [self.fetchedResultsController objectAtIndexPath:indexPath];

    // Checks if user simply added a body of text (not from a source or URL)
    if ([articleInfo.isUserAddedText isEqualToNumber:@(YES)]) {
        CellIdentifier = @"BasicArticleCell";
    }
    else {
        CellIdentifier = @"FullArticleCell";
    }

    ArticleCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];

    if (cell == nil) {
        cell = [[ArticleCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
    }

    // If the user simply added a body of text, only articlePreview and progress has to be set
    cell.preview = articleInfo.preview;

    // If it's from a URL or a source, set title and URL as well
    if ([articleInfo.isUserAddedText isEqualToNumber:@(NO)]) {
        cell.title = articleInfo.title;
        cell.URL = articleInfo.url;
    }

    return cell;
}

但是我在if语句中的initWithStyle方法上设置了一个断点,它永远不会被调用:

enter image description here

这会导致什么?我每次都会删除应用程序并从头开始构建它,因此数据肯定会添加到UITableView中,但所有单元格都是空白的。我可以告诉我添加了一堆单元格,因为我在所有单元格上都有公开指示符,而表格视图只是填充了仅带指示符的空单元格。

enter image description here

我做错了什么?

1 个答案:

答案 0 :(得分:2)

尝试

ArticleCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

而不是

ArticleCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];

第一个是旧的标准方式。它不会为您创建一个单元格。在第二个时,将从故事板创建一个单元格。因此,如果你使用故事板,你应该使用你现在使用的方法,但它永远不会信息if分支,因为单元格永远不会是零。


在实例化表单故事板时,永远不会调用initWithStyle:reuseIdentifier:。在-initWithCoder:-layoutSubviews

中设置所有内容