我已经实现了一个自定义编辑附件视图,如我对this问题的回答中所述。在大多数情况下,它工作得很好,但我注意到它有一个小问题。
当我在表视图中滚动或选择另一行时,我的自定义编辑附件不会被取消。使用标准编辑附件( delete按钮),可以捕获表格上其他任何位置的触摸并用于删除删除附件视图-例如,您可以自己在内置Notes应用程序上看到这一点,或者在具有标准编辑附件视图的任何其他地方看到这一点。
这一定是因为我在滑动删除模式下返回了UITableViewEditingStyleNone。但是,如果我返回任何其他模式,则不会显示我的自定义编辑附件。
我如何才能恢复标准编辑样式的功能,即在表视图上的任何位置触摸都会取消编辑附件?
单元格没有子类,但它是从具有自定义布局的nib文件加载的。编辑附件视图是nib文件的一部分,并通过editingAccessoryView插座连接。
我已经设法实现了一半的效果,通过存储滑动到编辑的行的索引路径,并在表格上选择了另一行或开始滚动时将该单元格设置为编辑模式。然而,我想正确地做这件事。
发布于 2012-04-12 15:57:15
我能够解决这个问题,但不幸的是,它需要额外的跑腿工作,而且不像设置几个属性那么简单。
在我的
- (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,以启用对希望用户能够删除的单元格的编辑。
https://stackoverflow.com/questions/7699431
复制相似问题