我使用重用标识符创建单元格以编程方式。
注意 - 我没有使用故事板来创建单元格
每当单元格出列时,单元格为零,因此需要使用alloc重新创建单元格,这很昂贵。
编辑(增加了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;
}
答案 0 :(得分:12)
您需要先将CellIdentifier
设为Cell
。你在做吗?在创建新单元格时,需要为其分配此标识Cell
。只有那时iOS才能dequeueReusableCellWithIdentifier
使用该标识符。以编程方式,你可以这样做 -
UITableViewCell *cell = [[UItableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:@"Cell"];
您也可以从Interface Builder设置标识符 -
答案 1 :(得分:11)
我犯了几个错误:
UITableViewController
的子类,但是在子类之外创建了tableView tableView
,self.tableView
在表视图控制器中返回索引路径的单元格时,我使用的是self.tableView
而不是{{1} }}。另外,请确保将单元格标识符声明为tableView
static
由于static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [self.tableView dequeueReusableCellWithIdentifier:CellIdentifier];
和tableView
代表不同的表,因此单元格未从同一个表中出列,因此始终为self.tableView
答案 2 :(得分:2)
此代码应该生成警告“控制到达非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;
}
答案 3 :(得分:1)
首先在 viewDidLoad 方法中为tableViewCell声明小区标识符:
[tableView registerClass:UITableViewCell.class forCellReuseIdentifier:@"MyCell"];
现在回想一下具有相同标识符“MyCell”的UITableViewCell实例:
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"MyCell" forIndexPath:indexPath];
进一步填充单元格。现在逻辑执行有限数量的单元格能够有效地显示大量列表(使用出列概念)。
但请记住为单元格中使用的每个UIView分配值(如果需要,甚至为nil),否则会发生文本/图像的覆盖/重叠。