如何使用 reloadRowsAtIndexPath 更新行

发布于 2024-10-17 11:53:21 字数 1494 浏览 0 评论 0原文

我正在尝试使用按钮删除单元格。

这是一个单元格的实现。

- (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: for visible indexPath 放在 endUpdates 方法之后,效果非常好。但是删除动画由于 reloadRows 动画而变得丑陋(即使我将其设置为“否”)。 那么有没有一种方法可以在不重新加载单元格的情况下重新加载单元格索引路径。或者不使用标签删除行。


非常感谢。

I'm trying to delete cell with a Button.

Here is the implementation of a cell.

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

This works well until I've delete a row, the button isn't reloaded so after a delete, I don't delete the good index. I tried to put reloadRowsAtIndexPaths:withRowAnimation: for visible indexPath after the endUpdates method and it works very well. But the delete animation became ugly by the reloadRows animation (even if I set it to NO).
So is there a way to reload cells without reloadCellsAtIndexPath. Or delete a rows without using tags.

Thx a lot.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

吻安 2024-10-24 11:53:21

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

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

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

You should be able to lookup the index of the cell by using logic similar to the following:

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

With this approach, you would not need to store the value of the row index in the cell tag.

貪欢 2024-10-24 11:53:21

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

[_tableView reloadData];

To just reload the table (and thus all its cells), you could try just using:

[_tableView reloadData];
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文