2012-04-04 70 views
4

我一直在试图区分在我的UITableView编辑状态。区分UITableView编辑状态?

我只需要时调用的方法在编辑模式下轻敲编辑按钮后,那么当你拿到你的幻灯片中,你看到的小圆形删除图标,但在用户刷卡删除。

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

谢谢。

编辑:

解由于罗德里戈

无论每个小区和整个的tableview具有“编辑” 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];    
     } 
    } 
} 
+0

恕我直言,这不起作用:当在常规编辑模式(所有单元格可编辑),然后第一个单元格认为它是在“在删除模式下滑动”。 – obiwahn 2012-11-23 11:12:16

回答

3

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

您可以设置的UITableView是在编辑模式和测试与isEditing功能。但细胞有相同的isEditing。所以你可以检查是否只有一个单元格处于编辑状态或所有的UITableView。

检查当你设置一个单元格处于编辑状态时,UITableView根本改变为编辑状态。

+0

啊,真的很好主意,但我已经给出了一个尝试,并没有设法让它以这种方式工作。 – 2012-04-04 13:12:24

+0

得到了这个解决方案的工作,谢谢!我发布了如何在OP中解决它。 – 2012-04-04 13:37:14

1

我发现要做到这一点的唯一可靠的方法是保持私有标志inEditMode并在setEditing:animated中切换此标志。然后使用inEditMode而不是isEditing来检查表格是否处于编辑模式。

+0

对不起,这里没有很多的信息,谢谢回答,但你可以扩大吗?你如何使用你的'inEditMode' BOOL来区分编辑模式? – 2012-04-04 13:20:10

+1

不同于'isEditing',如果表格在编辑模式下是“真正的”(即不是通过单一的滑动操作),则此'inEditMode'仅* * YES。 – edsko 2012-04-04 14:37:41

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:动画:我检查editButtonPressed标志,以确定是否我在,因为一个有按编辑按钮或简单的用户刷卡。如果由于编辑按钮我在那里,我添加单元格;否则我不会。

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

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

问候,

--John

4

即使这个职位是很老了,下面可能会有所帮助别人:如果您实现以下的委托信息

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

and

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

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