0

我正在使用“滑动删除”,如果我想删除一个序列中的多个单元格,uitableview 中的某些单元格会加倍或出现一些已删除的单元格。因为我不能发布任何图片,所以我将描述表格的行为:

  1. 单元格删除前的表格:User1、User2、User3、User4、User5、添加新用户。
  2. 删除 User1 和 User5 后的表:User2、User3、User4、Add new user、Add new user(但不可选择)。
  3. 删除 User3 后的表:User4、User2、Add new user、User5(可选择)、Add new user(不可选择)。

我删除单元格的方法如下所示:

- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath {
   if (editingStyle == UITableViewCellEditingStyleDelete) {
      [self.usersTable beginUpdates];
      UITableViewCell *cell = (UITableViewCell *)[self.usersTable cellForRowAtIndexPath:indexPath];
      NSString *userNameToDelete = cell.textLabel.text;
      // Data source
      [self.appDict removeObjectForKey:userNameToDelete];
      self.arrayOfUserNames = [[NSMutableArray alloc] initWithArray:[self.appDict allKeys]];
      [self.appDict writeToFile:self.pathOfAppFile atomically:YES];
      // Deleting cell
      [self.usersTable deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath]  withRowAnimation:UITableViewRowAnimationFade];
      [self.usersTable endUpdates];
   }
}

支持编辑的方法:

- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath {
if (indexPath.row == [self.arrayOfUserNames count]) {
   return NO;
}
else {
   return YES;
}

部分行数:

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
   return [self.arrayOfUserNames count] + 1;
}

我已经尝试过 [self.usersTable reload] 但一切都保持不变。我也尝试在 numberOfRowsInSection: 中更改表格的大小:但这也无济于事。任何想法我做错了什么?

4

1 回答 1

0

你没有实施吗

- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath {
    if (editingStyle == UITableViewCellEditingStyleDelete) {
        //delete your user record
    }    
}

?

如果不是,Tableview 将删除单元格,但基础数据不会被修改,它会导致这种奇怪的行为。

编辑:

尝试使用:

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

      NSString *userNameToDelete = [[self arrayOfUserNames] objectAtIndex:indexPath.row];
      // Data source
      [self.appDict removeObjectForKey:userNameToDelete];
      self.arrayOfUserNames = [[NSMutableArray alloc] initWithArray:[self.appDict allKeys]];
      [self.appDict writeToFile:self.pathOfAppFile atomically:YES];

      [tableView reloadData];


   }
}

做一个简短的解释:

什么时候

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

被调用时,tablecell 已从 tableview 中删除,因此您不必处理此问题。如果你这样做,你将删除下一个单元格。

于 2013-05-07T13:03:54.587 回答