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

另外,要初始化我的tableviewcontroller:
ATSearchSettingsViewController *mySearchSettings = [sb instantiateViewControllerWithIdentifier:@"SearchSettings"];

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

最佳答案

如果问题在于UITableView不会从情节提要中将单元出队。尝试检查您使用的是prototype cells而不是static cells。 UITableView不会使静态单元出队。

如果问题是您始终在调用[[ATSaveCell alloc] init]。如果没有任何重用,则表视图将需要。

从文档:dequeueReusableCellWithIdentifier

如果一个可用的单元格可用,则此方法使该单元出队或创建一个
使用您先前注册的class或nib文件的新文件。如果不
单元可供重用,并且您没有注册 class 或笔尖
文件,此方法返回nil。

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

关于ios - dequeueReusableCellWithIdentifier始终返回nil,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23633626/

10-09 13:01