我一直在尝试区分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 :(得分:5)
即使这篇文章很老,以下内容也可能对其他人有所帮助:
如果您实现以下委托消息:
- (void)tableView:(UITableView *)tableView willBeginEditingRowAtIndexPath:(NSIndexPath *)indexPath;
和
- (void)tableView:(UITableView *)tableView didEndEditingRowAtIndexPath:(NSIndexPath *)indexPath;
编辑单行时将调用这些方法。只有当用户点击编辑按钮时才会调用-[UIViewController setEditing:animated:]
。
答案 1 :(得分:4)
有一种策略,我现在不测试,但也许可以工作。
您可以将UITableView设置为编辑模式并使用isEditing
功能进行测试。但是单元格具有相同的isEditing
。因此,您可以检查是否只有一个单元格处于编辑状态或所有UITableView。
检查当您将一个单元格设置为处于编辑状态时,UITableView是否会更改为编辑状态。
答案 2 :(得分: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)。
希望这种替代方案有所帮助。
此致
- 约翰
答案 3 :(得分:1)
我发现这样做的唯一可靠方法是维护私有标记inEditMode
并在setEditing:animated
中切换此标记。然后使用inEditMode
而不是isEditing
来检查表格是否处于编辑模式。