删除表格的单元格的问题

时间:2011-12-06 08:23:35

标签: iphone xcode uitableview uitextfield

在我的表格中(UITableView)我使用UITextField而不是UILabel的单元格,通过“addSubview”添加到单元格中。我需要这个,因为我希望我的单元格可以直接编辑。作为单元格样式,我使用UITableViewCellStyleDefault。 - 一切正常:我可以随时添加和编辑单元格。

但是,删除会产生问题:当我“删除”一个单元格并在表格中reloadData时,该单元格仍会显示其旧内容以​​及新内容。对于它下面的所有细胞也是如此。当我关闭我的应用并再次启动时,表格会正确显示。

这里是我用来删除单元格的代码

- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle 
                                            forRowAtIndexPath:(NSIndexPath *)indexPath {

NSUInteger row = [indexPath row];
NSUInteger count = [datas count];

if (row <= count) {

    NSString* data = [datas objectAtIndex: [indexPath row]];
    [self deleteDatas:data];
}

[self.locationTable reloadData];

}

deleteDatas中的位置我只是从文件中删除相应的数据,这个数据正常工作,通过新加载应用程序“prooved”。

下面

 -(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

static NSString *CellIdentifier = @"Cell";    
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

if (cell == nil) {
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
    UILongPressGestureRecognizer *longPressGesture = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(longPress:)];
    longPressGesture.minimumPressDuration = 2.0;
    [cell addGestureRecognizer:longPressGesture];
}

// Configure the cell.

// table cell with uitextfield instead of lable.
UITextField* textField = [[UITextField alloc] initWithFrame:CGRectMake(10, 10, 185, 30)];
textField.enabled = NO;
[cell.contentView addSubview:textField];

NSUInteger count = [datas count];
NSUInteger row = [indexPath row];

// last cell is empty to edit it
if (row+1 < count) {

    textField.text = [datas objectAtIndex:[indexPath row]];
    [cell setAccessoryType:UITableViewCellAccessoryDisclosureIndicator];
}

return cell;

}

有什么想法吗? - 谢谢

任何想法,为什么我的细胞显示两倍的内容(一次是原始细胞,一次是细胞内容?) - 我想s.th.重新加载单元格是错误的。 - 文本域是否可能出现问题? - 我怎么能搞清楚这一点?

2 个答案:

答案 0 :(得分:1)

您应该编写更像这样的commitEditingStyle:方法:

- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath {
  if (editingStyle == UITableViewCellEditingStyleDelete) {
    if (indexPath.row <= [data count]) {
      // Update the model by deleting the actual data
      NSString* data = [datas objectAtIndex:indexPath.row];
      [self deleteDatas:data];
      // Delete the row from the table
      [self.tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationBottom];
    }
  }
}

要检查的其他事项,是你的tableView方法:numberOfRowsInSection:返回正确的数据,如果没有,那么当表试图删除行时你会得到断言失败,并且逻辑没有添加起来。

答案 1 :(得分:0)

我认为您还应该在commitEditingStyle中删除mutablearray中的元素...

NSString* data = [datas objectAtIndex: [indexPath row]];
[self deleteDatas:data];
[datas removeObjetAtIndex: [indexPath row]];

否则在你的下一个reloadData中,字符串仍然在内存中并显示在cellForRow中...