我已经实现了自定义编辑附件视图,如我对this问题的回答中所述。在大多数情况下它工作得很好,但我注意到它有一个小问题。
当我在表格视图中滚动或选择另一行时,我的自定义编辑附件不会被解除。使用标准编辑附件(删除按钮),可以捕获表格上任何其他位置的触摸并用于删除删除附件视图 - 您可以在内置的Notes应用程序中自行查看,例如,或在任何其他位置使用标准编辑附件视图。
这一定是因为我在刷卡到删除模式时返回UITableViewEditingStyleNone
。但是,如果我返回任何其他模式,则不会显示我的自定义编辑附件。
如何恢复标准编辑样式的功能,在桌面视图的任何位置触摸都会消除编辑附件?
单元格没有子类,但是它是从具有自定义布局的nib文件加载的。编辑附件视图是nib文件的一部分,通过editingAccessoryView插座连接。
我已经设法通过存储滑动到编辑行的索引路径来实现我想要的效果,并且如果选择了另一行或者在表格上滚动,则将该单元格设置为编辑模式。但是,我想做得好。
答案 0 :(得分:2)
我能够解决这个问题,但遗憾的是它需要额外的腿部工作,并不像设置几个属性一样简单。
在我的
- (UITableViewCellEditingStyle)tableView:(UITableView *)_tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath
方法我返回UITableViewCellEditingStyleNone
,以便显示我的自定义editingAccessoryView
。在这种方法中我也这样做:
self.tableView.scrollEnabled = NO;
if(self.editingPath)
{
[[tableView cellForRowAtIndexPath:editingPath] setEditing:NO animated:YES];
}
self.editingPath = indexPath;
for (UITableViewCell *cell in [tableView visibleCells])
{
cell.selectionStyle = UITableViewCellSelectionStyleNone;
}
这会禁用滚动,然后存储我们刷过的indexPath
以供日后使用。如果您在编辑行时滑动另一行,则会在第一行编辑并编辑第二行,这就是苹果应用的行为方式。我还将所有可见单元格上的单元格selectionStyle
设置为UITableViewCellSelectionStyleNone
。当用户在当前正在编辑的单元格中选择另一个单元格时,这会减少蓝色闪烁。
接下来,我们需要在点击另一个单元格时关闭accessoryView
。为此,我们实现了这个方法:
-(NSIndexPath *)tableView:(UITableView *)_tableView willSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
if(self.editingPath)
{
UITableViewCell *c = [tableView cellForRowAtIndexPath:self.editingPath];
[c setEditing:NO animated:YES];
self.tableView.scrollEnabled = YES;
self.editingPath = nil;
for (UITableViewCell *cell in [tableView visibleCells])
{
cell.selectionStyle = UITableViewCellSelectionStyleBlue;
}
return nil;
}
return indexPath;
}
当有人即将点击一个单元格时,如果我们正在编辑那么这就是那个单元格并且不返回任何内容。
也适用于
-(BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath
我返回YES
,以便对我希望用户能够删除的单元格进行编辑。