如何检测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
你可以在UIViewController
find它。 (呃,这是最有可能的地方,还有其他的。)
当子类化一个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:
编辑背后的想法是,启用编辑时,每个单元格被告知进入编辑模式,并询问是否有任何特定的编辑控件应该应用。 所以理论上,除了改变单元格的外观之外,不需要检测进入编辑模式。 进入编辑模式时你想做什么?