dequeueReusableCellWithIdentifier始终返回nil(不使用storyboard)

use*_*037 9 objective-c deque uitableview ios

我正在使用重用标识符以编程方式创建单元格.

注意 - 我没有使用故事板来创建单元格

每当单元出列时,单元格为零,因此需要使用alloc重新创建单元,这很昂贵.

编辑(增加了1个问题并更正了代码)

  • 为什么这个出列总是返回零?我该如何纠正?
  • 只有在与storyboard/nib文件一起使用时才会出列队列吗?

- (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;
}
Run Code Online (Sandbox Code Playgroud)

Sri*_*aju 12

你需要先设置CellIdentifieras Cell.你在做吗?在创建新单元格时,需要为其分配此标识符Cell.只有iOS才能dequeueReusableCellWithIdentifier使用该标识符.以编程方式,你可以这样做 -

UITableViewCell *cell = [[UItableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:@"Cell"];
Run Code Online (Sandbox Code Playgroud)

您也可以从Interface Builder设置标识符 -

在此输入图像描述


use*_*037 11

我犯了几个错误:

  1. 我正在使用子类UITableViewController,但是在子类之外创建了tableView
  2. tableView在表视图控制器中创建了一个,self.tableView在tableview控制器中返回索引路径的单元格时,我正在使用self.tableView而不是tableView.
  3. 另外,请确保将单元标识符声明为 static

    static NSString *CellIdentifier = @"Cell";
    
    UITableViewCell *cell = [self.tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    
    Run Code Online (Sandbox Code Playgroud)

由于tableView并且self.tableView代表不同的表,因此单元格没有从同一个表中出列,因此总是如此nil