如何检测iPhone UITableView上的编辑模式

对于我的iPhone应用程序,我有一个可编辑的(删除)表视图。 我希望能够检测到用户点击了“编辑”button。 看到这个图像: http : //grab.by/It0

从文档,看起来像是如果我实施:

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

那么我可以检测到它(虽然从方法的名称,我不会这么认为)。 这certificate不起作用。

任何想法检测到这个? 我想要的是我想要在删除模式下挂钩左上angular的“全部删除”button。

谢谢

它可能不像你期望的那样工作,因为willBeginEditingRowAtIndexPath:在编辑开始之前被调用。

如果您想用其他方法检查,则需要editing属性:

 @property(nonatomic, getter=isEditing) BOOL editing 

如果您想在按下“编辑”button时执行某些操作,则需要实施setEditing方法:

  - (void)setEditing:(BOOL)editing animated:(BOOL)animated 

你可以在UIViewControllerfind它。 (呃,这是最有可能的地方,还有其他的。)

当子类化一个tableviewcontroller(大多数人将要做的大部分时间,因为你不得不重写它的委托方法只是把数据放在它…),你可以重写setEditing:animated:方法来获取编辑状态的变化。

 - (void)setEditing:(BOOL)editing animated:(BOOL)animated { NSLog(@"Editing %i", editing); [super setEditing:editing animated:animated]; } 

通过状态转换到超类,但让你跳在中间,并检测到变化,或改变它,如果你想…

setEditing:animated:例子不适用于我(在iOS 6.1上)来检测进入和退出删除确认模式时发生的状态更改。 看起来setEditing:animated:只在表视图进入编辑模式时调用一次,而不是单元格的状态变化。 在一些debugging器好玩之后,我到了一种检测单元状态变化的方法。

我的用例与你的不同。 我只想隐藏标签,当删除button显示,以便其他单元格内容不重叠,当删除button滑入(我使用UITableViewCellStyleValue2,与左边的蓝色标签和黑色标签在右边。)

(在你的UITableViewCell子类中)

 - (void)willTransitionToState:(UITableViewCellStateMask)state { [super willTransitionToState:state]; if (state & UITableViewCellStateShowingDeleteConfirmationMask) { // showing delete button [self.textLabel setAlpha:0.0f]; // <-- I just wanted to hide the label } } - (void)didTransitionToState:(UITableViewCellStateMask)state { if (!(state & UITableViewCellStateShowingDeleteConfirmationMask)) { // not showing delete button [self.textLabel setAlpha:1.0f]; // <-- show the label } } 

肯德尔的回答是有效的。 我以下面的方式做了。

 // Override to support conditional editing of the table view. - (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath { // Return NO if you do not want the specified item to be editable. NSLog(@"Can edit %d", tableView.editing); if (tableView.editing == 1) { [self.editButtonItem setTitle:EDIT_BUTTON_TITLE]; }else { [self.editButtonItem setTitle:DONE_BUTTON_TITLE]; } return YES; } 

该方法告诉你什么时候用户正在编辑一个单元格,而不是把表格编辑到编辑模式。 当进入编辑模式时,有一种方法要求每个单元格是否可以编辑:

 - (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath 

我不认为重写setEditing:animated:是有道理的,因为你将不得不setEditing:animated: UITableView这是额外的工作和一个你没有其他原因需要的类,更不用说它将不得不传达已经打开编辑的事实回到控制器。

另外一个select是简单地自己添加Editbutton – 这是一个内置的UIBarButtonSystemItem ,你可以添加它,然后让它调用你自己的方法,在其中你做了一些特定的事情,然后在UITableView本身调用setEditing:animated:

编辑背后的想法是,启用编辑时,每个单元格被告知进入编辑模式,并询问是否有任何特定的编辑控件应该应用。 所以理论上,除了改变单元格的外观之外,不需要检测进入编辑模式。 进入编辑模式时你想做什么?