1

不处于编辑模式时,我的 tableview 工作得很好。所有单元格都按预期显示,但如果我进入编辑模式并滚动,在编辑模式下重绘的单元格的内容不正确。在我关闭编辑的函数中,我重新加载表数据,它再次正确显示。

这里是相关代码。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:    (NSIndexPath *)indexPath
{    
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:nil];

cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];


FieldItemDecrypted *theField = [decryptedArray objectAtIndex:indexPath.row];




    // Configure the cell...

      cell.textLabel.text = [[NSString alloc] initWithData:theField.field encoding:NSUTF8StringEncoding];
      cell.detailTextLabel.text = [[NSString alloc] initWithData:theField.type encoding:NSUTF8StringEncoding];    


return cell;
}

还有我的编辑代码:

- (IBAction)editRows:(id)sender
{

if ([self.tableView isEditing])
{
    [self.tableView setEditing:NO animated:YES];
    [self.tableView reloadData];
}
else
{
    [self.tableView setEditing:YES animated:YES];
}

}

应该是这样的:

在此处输入图像描述

但在编辑时滚动后看起来像这样:

在此处输入图像描述

4

2 回答 2

3

UITableViewCell首先初始化一个对象,然后从表视图中出列?这是不正确的。

尝试:

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];

if(cell == nil)
{
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier];
}

我刚刚在一个演示项目上试过这个,它的行为符合预期。

于 2013-04-16T00:18:29.077 回答
1

我更熟悉这种类型的单元重用:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:    (NSIndexPath *)indexPath
{    
  static NSString *CellIdentifier = @"Cell";   
  UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

  if (!cell) {
      cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle 
                                      reuseIdentifier:nil];
  }
  FieldItemDecrypted *theField = [decryptedArray objectAtIndex:indexPath.row];
  // Configure the cell...

  cell.textLabel.text = [[NSString alloc] initWithData:theField.field encoding:NSUTF8StringEncoding];
  cell.detailTextLabel.text = [[NSString alloc] initWithData:theField.type encoding:NSUTF8StringEncoding];    


  return cell;
}
于 2013-04-16T05:15:11.077 回答