【问题标题】:dequeueReusableCellWithIdentifier always returns nildequeueReusableCellWithIdentifier 总是返回 nil
【发布时间】:2014-05-13 14:09:12
【问题描述】:

我有一个包含 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;
    } 

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

另外,初始化我的tableviewcontroller:

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

很明显,表格视图没有在情节提要中注册原型单元格。

【问题讨论】:

  • 如果没有足够的单元格容纳视图,它将始终创建一个新单元格。您不能重复使用仍然可见的单元格。
  • 尝试添加 [self.tableView registerClass:[ATSaveCell class] forCellReuseIdentifier:@"SaveCell"];在 viewDidLoad
  • @WilliamGeorge 这可能是一个答案,而不仅仅是评论
  • @wootage 这可以防止崩溃,但单元格与我在情节提要中制作的原型不同。
  • @WilliamGeorge 我只返回 1 个单元格。

标签: ios


【解决方案1】:

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

如果问题是您总是打电话给[[ATSaveCell alloc] init]。如果表视图没有任何可重用的内容,则需要这样做。

来自文档:dequeueReusableCellWithIdentifier

如果一个现有单元格可用,此方法会使现有单元格出列或创建一个 使用您之前注册的类或 nib 文件新建一个。如果不 单元格可重复使用,并且您没有注册类或 nib 文件,此方法返回 nil。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-09-27
    • 1970-01-01
    • 2012-11-02
    • 2015-03-06
    • 1970-01-01
    • 2014-01-17
    • 2017-03-28
    • 2015-03-05
    相关资源
    最近更新 更多