我编程创建单元使用重用标识符。
注 -我不使用故事板创建细胞
每当细胞出列,细胞是零,所以细胞需要使用页头,这是昂贵的是新创建的。
编辑(添加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;
}
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 -
我做了几个错误:
- 我用的子类
UITableViewController
,但创建子类的tableView外 - 有一个
tableView
在表视图控制器,它是创建self.tableView
在的tableview控制器,而返回为索引路径的单元,I是使用self.tableView
代替tableView
。 此外,确保小区标识符被声明为static
static NSString *CellIdentifier = @"Cell"; UITableViewCell *cell = [self.tableView dequeueReusableCellWithIdentifier:CellIdentifier];
由于tableView
和self.tableView
分别代表不同的表中,小区没有被从同一个表中出列并且因此总是nil
此代码应生成警告“控制到达非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;
}
首先声明小区标识符在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)