dequeueReusableCellWithIdentifier总是返回零(不使用故事板)(deq

2019-08-02 17:54发布

编程创建单元使用重用标识符。

-我不使用故事板创建细胞

每当细胞出列,细胞是零,所以细胞需要使用页头,这是昂贵的是新创建的。

编辑(添加1个更多问题和校正代码)

  • 为什么会出现这种离队总是返回零? 我该如何纠正呢?
  • 是否出队的工作以及情节提要/笔尖文件时才使用?

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{

    static NSString *CellIdentifier = @"Cell";

    UITableViewCell *cell = [self.tableView dequeueReusableCellWithIdentifier:CellIdentifier];

    if(!cell) //Every time cell is nil, dequeue not working 
    {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];

    }

    return cell;
}

Answer 1:

You need to first set the CellIdentifier as Cell. Are you doing that? When you are creating a new cell you need to assign this identifier Cell to it. only then iOS will be able to dequeueReusableCellWithIdentifier with that identifier. Programatically you can do it like so -

UITableViewCell *cell = [[UItableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:@"Cell"];

You can set identifier from Interface Builder too -



Answer 2:

我做了几个错误:

  1. 我用的子类UITableViewController ,但创建子类的tableView外
  2. 有一个tableView在表视图控制器,它是创建self.tableView在的tableview控制器,而返回为索引路径的单元,I是使用self.tableView代替tableView
  3. 此外,确保小区标识符被声明为static

     static NSString *CellIdentifier = @"Cell"; UITableViewCell *cell = [self.tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 

由于tableViewself.tableView分别代表不同的表中,小区没有被从同一个表中出列并且因此总是nil



Answer 3:

此代码应生成警告“控制到达非void函数的结束”,因为你实际上并没有返回任何东西。 添加return cell; 到函数结束。 此外,你永远不重用标识符添加到新创建的细胞。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    static NSString *CellIdentifier = @"Cell";    
    UITableViewCell *cell = [self.tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if(cell == nil) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
    }
    return cell;
}


Answer 4:

首先声明小区标识符viewDidLoad方法作为tableViewCell:

[tableView registerClass:UITableViewCell.class forCellReuseIdentifier:@"MyCell"];

现在回想一下,用相同的标识符“了myCell”为的UITableViewCell的实例:

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"MyCell" forIndexPath:indexPath];

另外刚刚填补细胞..逻辑现在执行的是细胞的数量有限,能够有效地显示出极大的大名单(出队使用的概念)。

但要记住分配值(甚至为零如果需要的话),以在小区中使用的每一个的UIView,文本的改写,否则/重叠/图像会发生。



文章来源: dequeueReusableCellWithIdentifier always returns nil (not using storyboard)