如何使用reloadRowsAtIndexPaths更新行

时间:2011-02-14 17:25:08

标签: iphone objective-c ipad uitableview delete-row

我正在尝试用Button删除单元格。

以下是单元格的实现。

- (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] autorelease];

        UIButton *btn = [UIButton buttonWithType:UIButtonTypeRoundedRect];
        btn.frame = CGRectMake(0.f, 0.f, 30.f, 30.f);
        [btn addTarget:self 
                action:@selector(btnTouched:)
      forControlEvents:UIControlEventTouchUpInside];
      [cell addSubview:btn];
      cell.tag = indexPath.row;
    }
   return cell;
}

- (void)btnTouched:(UIButton *)sender
{
    NSIndexPath *indexPath = [NSIndexPath indexPathForRow:sender.tag inSection:0];

    [_myMutableArray removeObjectAtIndex:sender.tag];
    [_tableView beginUpdates];
    [_tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath]
                      withRowAnimation:UITableViewRowAnimationLeft];
    [_tableView endUpdates];
}

这很有效,直到我删除一行,按钮没有重新加载所以删除后,我不删除好的索引。我尝试在reloadRowsAtIndexPaths:withRowAnimation:方法之后为visible indexPath添加endUpdates,但效果非常好。但是reloadRows动画使删除动画变得丑陋(即使我将其设置为NO)。 那么有没有办法在没有reloadCellsAtIndexPath的情况下重新加载单元格。或者不使用标签删除行。


很多。

2 个答案:

答案 0 :(得分:3)

您应该能够使用类似于以下内容的逻辑查找单元格的索引:

NSIndexPath *indexPath = [_tableView indexPathForCell:(UITableViewCell *)[sender superview]];

使用这种方法,您不需要将行索引的值存储在单元格标记中。

答案 1 :(得分:0)

要重新加载表格(以及它的所有单元格),您可以尝试使用:

[_tableView reloadData];