dequeueReusableCellWithIdentifier始终返回nil

时间:2014-05-13 14:09:12

标签: ios

我有一个包含6个单元格和几个部分的静态表。当我初始化一个单元格时,它总是返回nil,尽管我在传递的......中使用了完全相同的方法。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    if (indexPath.section == SAVE_SECTION) {
        ATSaveCell *cell = [tableView dequeueReusableCellWithIdentifier:@"SaveCell"];
        if(cell == nil) {
            NSLog(@"nil cell");
            cell = [[ATSaveCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"SaveCell"];
        }
        cell.textLabel.text = @"test";
        return cell;
    } 

始终输出零个单元格。在我的故事板中,我有一个tableviewcontroller,它定义了单元格,id为“SaveCell”。我还检查过以确保表ciew控制器与我正在使用的类是同一个类...我已经在传递中使用了这个完全相同的方法,所以我不确定为什么每次都返回nil的单元格。 / p>

另外,初始化我的tableviewcontroller:

ATSearchSettingsViewController *mySearchSettings = [sb instantiateViewControllerWithIdentifier:@"SearchSettings"];

很明显,表视图没有在故事板中注册原型单元格。

1 个答案:

答案 0 :(得分:4)

如果问题是UITableView没有从故事板中出列单元格。请尝试检查您使用的是prototype cells而不是static cells。 UITableView不会使静态单元格出列。

如果问题是你总是打电话给[[ATSaveCell alloc] init]。如果表格视图没有重复使用,则需要表格视图。

来自文档: dequeueReusableCellWithIdentifier

  

如果现有单元格可用或创建现有单元格,则此方法会出现   使用您之前注册的类或nib文件的新文件。如果不   单元格可以重复使用,而您没有注册类或笔尖   file,此方法返回nil。

因此,如果没有足够的单元格来适应视图,它将始终创建一个新的单元格。