5

我一直在尝试区分 UITableView 中的编辑状态。

只有在点击编辑按钮后处于编辑模式时,我才需要调用一个方法,因此当您将单元格滑入并看到小的圆形删除图标时,而不是当用户滑动删除时。

无论如何我可以区分两者吗?

谢谢。

编辑:

多亏了罗德里戈的解决方案

每个单元格和整个表格视图都有一个“正在编辑”的 BOOL 值,所以我循环遍历所有单元格,如果其中有多个正在编辑,那么我们知道整个表格是(用户点击了编辑按钮),但是如果只有一个是编辑,然后我们知道用户已经滑动了一个单元格,正在编辑那个单独的单元格,这让我可以单独处理每个编辑状态!

- (void)setEditing:(BOOL)editing animated:(BOOL)animated
{
    [super setEditing:editing animated:animated];


    int i = 0;
    //When editing loop through cells and hide status image so it doesn't block delete controls. Fade back in when done editing.
    for (customGuestCell *cell in self.tableView.visibleCells) 
    { 
        if (cell.isEditing) {
            i += 1;
        }
    }

    if (i > 1) 
    {
        for (customGuestCell *cell in self.tableView.visibleCells) 
        { 
            if (editing) 
            {
                // loop through the visible cells and animate their imageViews
                [UIView beginAnimations:nil context:nil];
                [UIView setAnimationDuration:0.4];
                cell.statusImg.alpha = 0;
                [UIView commitAnimations];
            } 
        }
    }
    else if (!editing) 
    {
        for (customGuestCell *cell in self.tableView.visibleCells) 
        { 
            [UIView beginAnimations:nil context:nil];
            [UIView setAnimationDuration:0.4];
            cell.statusImg.alpha = 1.0;
            [UIView commitAnimations];            
        }
    }
}
4

4 回答 4

5

即使这篇文章很老,以下内容可能对其他人有帮助:

如果您实现以下委托消息: - (void)tableView:(UITableView *)tableView willBeginEditingRowAtIndexPath:(NSIndexPath *)indexPath;

- (void)tableView:(UITableView *)tableView didEndEditingRowAtIndexPath:(NSIndexPath *)indexPath;

编辑单行时将调用这些方法。-[UIViewController setEditing:animated:]只有当用户点击编辑按钮时才会被调用。

于 2013-11-12T14:35:55.293 回答
4

有一种策略,我现在不测试,但也许可以。

您可以将 UITableView 设置为处于编辑模式并使用isEditing功能进行测试。但细胞有相同的isEditing。因此,您可以检查是只有一个单元格处于编辑状态还是所有 UITableView。

检查当您将一个单元格设置为处于编辑状态时,UITableView 是否完全更改为编辑状态。

于 2012-04-04T12:44:15.937 回答
2

我选择的解决方案是将编辑按钮的操作覆盖为自定义方法,例如 editBtnTapped。在这个方法中我设置了一个变量editButtonPressed,然后,因为我们覆盖了编辑按钮的动作,手动调用了setEditing:animated:。

在 viewDidLoad 中:

[self.navigationItem.rightBarButtonItem setAction:@selector(editBtnPressed)];

然后是新的操作方法:

- (IBAction) editBtnPressed
{
  if ([self isEditing]) 
  {
    self.editButtonPressed = NO;
    [self setEditing:NO animated:YES];
  }
  else  
  {
    self.editButtonPressed = YES;
    [self setEditing:YES animated:YES];
  }
}

现在在 setEditing:animated: 我检查 editButtonPressed 标志以确定我是否因为按下编辑按钮或简单的用户滑动而在那里。如果我因为编辑按钮而在那里,我会添加单元格;否则我不会。

请记住,您可能在其他地方需要该标志(例如 numberOfRowsInSection)。

希望这个替代方案有所帮助。

问候,

- 约翰

于 2012-06-17T03:13:12.053 回答
1

我发现这样做的唯一可靠方法是维护一个私有标志inEditMode并将这个标志切换到setEditing:animated. 然后使用inEditMode而不是isEditing检查表是否处于编辑模式。

于 2012-04-04T12:52:15.507 回答