首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >UITableViewCell自定义editingAccessoryView -未正确解除

UITableViewCell自定义editingAccessoryView -未正确解除
EN

Stack Overflow用户
提问于 2011-10-09 04:03:01
回答 1查看 6.8K关注 0票数 2

我已经实现了一个自定义编辑附件视图,如我对this问题的回答中所述。在大多数情况下,它工作得很好,但我注意到它有一个小问题。

当我在表视图中滚动或选择另一行时,我的自定义编辑附件不会被取消。使用标准编辑附件( delete按钮),可以捕获表格上其他任何位置的触摸并用于删除删除附件视图-例如,您可以自己在内置Notes应用程序上看到这一点,或者在具有标准编辑附件视图的任何其他地方看到这一点。

这一定是因为我在滑动删除模式下返回了UITableViewEditingStyleNone。但是,如果我返回任何其他模式,则不会显示我的自定义编辑附件。

我如何才能恢复标准编辑样式的功能,即在表视图上的任何位置触摸都会取消编辑附件?

单元格没有子类,但它是从具有自定义布局的nib文件加载的。编辑附件视图是nib文件的一部分,并通过editingAccessoryView插座连接。

我已经设法实现了一半的效果,通过存储滑动到编辑的行的索引路径,并在表格上选择了另一行或开始滚动时将该单元格设置为编辑模式。然而,我想正确地做这件事。

EN

回答 1

Stack Overflow用户

发布于 2012-04-12 15:57:15

我能够解决这个问题,但不幸的是,它需要额外的跑腿工作,而且不像设置几个属性那么简单。

在我的

代码语言:javascript
运行
复制
- (UITableViewCellEditingStyle)tableView:(UITableView *)_tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath

方法返回UITableViewCellEditingStyleNone,这样我的自定义editingAccessoryView就会显示出来。在此方法中,我还执行以下操作:

代码语言:javascript
运行
复制
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。为此,我们实现此方法:

代码语言:javascript
运行
复制
-(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;
}

这样做的目的是,当有人要单击一个单元格时,如果我们正在编辑,则取消对该单元格的编辑,并且不返回任何内容。

还可用于

代码语言:javascript
运行
复制
-(BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath

我返回YES,以启用对希望用户能够删除的单元格的编辑。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7699431

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档