Objective c dequeueReusableCellWithIdentifier始终返回nil(不使用情节提要)
我使用重用标识符以编程方式创建单元格 注意-我没有使用故事板创建单元格 每当单元出列时,单元都是nil,因此需要使用alloc新创建单元,这非常昂贵 编辑(增加1个问题和更正代码) 问题Objective c dequeueReusableCellWithIdentifier始终返回nil(不使用情节提要),objective-c,ios,uitableview,deque,Objective C,Ios,Uitableview,Deque,我使用重用标识符以编程方式创建单元格 注意-我没有使用故事板创建单元格 每当单元出列时,单元都是nil,因此需要使用alloc新创建单元,这非常昂贵 编辑(增加1个问题和更正代码) 问题 为什么这个出列总是返回零?我怎样才能纠正它 仅当与故事板/nib文件一起使用时,出列才起作用吗 代码 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
- 为什么这个出列总是返回零?我怎样才能纠正它
- 仅当与故事板/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;
}
您需要首先将
单元标识符设置为单元
。你在这么做吗?创建新单元格时,需要将此标识符单元格
分配给它。只有这样,iOS才能使用该标识符将ReuseAbleAbleCellWithIdentifier退出队列。在程序上,你可以这样做-
UITableViewCell *cell = [[UItableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:@"Cell"];
您也可以从Interface Builder中设置标识符-
此代码应生成警告“控件到达非无效函数的末尾”,因为您实际上没有返回任何内容。添加返回单元格代码>到函数末尾。此外,决不会将重用标识符添加到新创建的单元格中
- (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;
}
我犯了几个错误:
我使用了UITableViewController
的子类,但在子类之外创建了tableView
在表视图控制器中创建了一个tableView
,它是tableView控制器中的self.tableView
,当返回索引路径的单元格时,我使用的是self.tableView
而不是tableView
另外,确保单元标识符声明为静态
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [self.tableView dequeueReusableCellWithIdentifier:CellIdentifier];
由于tableView
和self.tableView
表示不同的表,因此单元格没有从同一个表中排队,因此总是nil
首先在viewDidLoad方法中声明tableViewCell的单元格标识符,如下所示:
[tableView registerClass:UITableViewCell.class forCellReuseIdentifier:@"MyCell"];
现在回想一下UITableViewCell的实例,其标识符与“MyCell”相同,如下所示:
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"MyCell" forIndexPath:indexPath];
再往前走,把电池加满。。现在,逻辑执行有限数量的单元能够高效地显示巨大的列表(使用出列概念)
但请记住为单元格中使用的每个UIView赋值(如果需要,甚至为零),否则会发生文本/图像的覆盖/重叠。它返回零的频率到底有多高?这些单元中有多少同时显示在您的设备屏幕上?重用意味着只重用那些刚刚从屏幕上滚下来的单元格。Srikar是对的。必须在新创建的单元格上设置相应的单元格标识符。它始终返回nil。在给定的时间显示4个单元格,当我滚动“出列”时返回“零”。我没有使用情节提要,而是通过编程创建单元格。所以我认为这个解决方案可能不适用。如果我错了,请纠正我嘿,伙计,我为两者都提供了解决方案。请仔细阅读答案。首先,我给出了编程解决方案,然后为了完整起见,我也提供了IB解决方案。很抱歉,NSString CellIdentifier设置为@“Cell”。注意,原始代码现在已经更新。我正在这样做,它出现在我粘贴的代码中。如果我遗漏了什么,你能告诉我吗。在粘贴代码时,我漏掉了几行,现在我已经编辑和更新了。您粘贴的代码就是我正在使用的代码。但它每次都返回零。为了完全消除歧义,我在nib
中将tableView
命名为mTableView
。