dequeueReusableCellWithIdentifier 总是返回 nil
Posted
技术标签:
【中文标题】dequeueReusableCellWithIdentifier 总是返回 nil【英文标题】:dequeueReusableCellWithIdentifier always returns 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 个单元格。 【参考方案1】:如果问题是 UITableView 没有从故事板中取出单元格。尝试检查您使用的是prototype cells
而不是static cells
。 UITableView 不会将静态单元格出列。
如果问题是您总是打电话给[[ATSaveCell alloc] init]
。如果表视图没有任何可重用的内容,则需要这样做。
来自文档:dequeueReusableCellWithIdentifier
如果一个现有单元格可用,此方法会使现有单元格出列或创建一个 使用您之前注册的类或 nib 文件新建一个。如果不 单元格可重复使用,并且您没有注册类或 nib 文件,此方法返回 nil。
因此,如果没有足够的单元格容纳视图,它将始终创建一个新单元格。
【讨论】:
以上是关于dequeueReusableCellWithIdentifier 总是返回 nil的主要内容,如果未能解决你的问题,请参考以下文章