从 UITableViewCell 隐藏删除按钮

Posted

技术标签:

【中文标题】从 UITableViewCell 隐藏删除按钮【英文标题】:Hide Delete button from UITableViewCell 【发布时间】:2013-09-09 11:35:31 【问题描述】: 当我的表格视图处于编辑模式时,会出现红色 (-) 按钮。 当用户点击其中一个时,会出现 [删除] 按钮。

当用户点击 [删除] 时,我首先会检查一些内容(部分是在线的)。可能不允许此删除操作。

当不允许删除该单元格时,如何隐藏 [Delete] 按钮,让红色 (|) 按钮以动画方式再次变为 (-)?所以,我不希望我的整个表格离开编辑状态。

【问题讨论】:

你能显示一些代码吗? 您是否需要允许任何编辑?听起来您只需要禁用编辑模式即可解决问题。尝试:[self setEditing:NO animated:YES](其中“self”是您的 UITableView 实例) @AbdullahShafique 我正在使用NSFetchedResultsController 并且必须发布不相关的代码。描述的删除过程主要由UITableView处理。 @MystikSpiral 否。用户可能还想删除另一个单元格,我不想强​​迫他再次点击导航栏上的编辑。 【参考方案1】:

要获得实际的动画(而不是UITableViewRowAnimationRight/UITableViewRowAnimationAutomatic)动画,只需这样做

[self.tableView beginUpdates];
[self.tableView setEditing:NO animated:NO];
[self.tableView setEditing:YES animated:NO];
[self.tableView endUpdates];

beginUpdatesendUpdates 提供动画,tableView 刚刚从不编辑切换到立即编辑,关闭删除按钮。

希望这会有所帮助!

【讨论】:

此答案不正确,但因为您建议使用setEditing,所以我将其选为“答案”。答案应该是这样的:[self.tableView setEditing:NO animated:YES];;是的,就是这样。不知道为什么将animated 设置为NO,为什么将表格再次设置回编辑模式,并且begin/endUpdates 不需要Apple documentation 解释的那样获取动画。 这对我有用。我试图在 commitEditingStyle 内部调用它,但它在那里不起作用。我使用 dispatch.async 到 tableView.setEditing(false, animated: false) tableView.setEditing(true, animated: false)。这可以将行设置为隐藏删除按钮的状态。不需要 beginUpdates()/endUpdates()。在 ios 10 上。【参考方案2】:

我自己也遇到过这个问题,我可能会打开一个警报视图来进一步提示用户,如果他们选择不继续,我希望重置删除按钮。这似乎是最简单的方法,假设 deleteIndexPath 是选择删除的行的索引路径:

[self.tableView reloadRowsAtIndexPaths:@[deleteIndexPath] withRowAnimation:UITableViewRowAnimationAutomatic];

【讨论】:

不错的解决方案。我试试看。 这是 OP 问题的正确答案 - 一个更好的例子是用户点击删除,程序生成 actionSheet 进行确认,用户取消。最好使用 UITableViewRowAnimationRight,因为这与删除按钮出现时的运动相反。【参考方案3】:

我现在看到您只想对某些单元格禁用删除。您可以通过以下几种方式做到这一点:

tableView:canEditRowAtIndexPath 方法:在您希望 DELETES 被禁用的地方返回 NO。 tableView:canMoveRowAtIndexPath:在您希望允许重新排序的地方返回 YES。

您可能需要考虑对 UITableViewCell 进行子类化,以使其能够保持自己的状态(因此单元格知道是否允许删除。然后您可以询问实际的单元格实例并确定是否应该启用删除即使在列表可能重新排序之后。

【讨论】:

我并没有说我想“禁用”某些单元格的删除。我想“隐藏”一个已经显示的 [删除] 按钮。请告诉我您在我的问题中遗漏了什么,以便您正确理解! 我认为您从错误的角度看待这个问题。我正在尝试为您提供一个示例,该示例将完全阻止删除按钮显示。如果您故意尝试显示然后隐藏带有动画的删除按钮,那只会让用户感到困惑。如果您不希望用户删除,根本不显示按钮,那么您就没有什么可隐藏的了。如果没有一些代码(或真正的用例),我不确定我能提供更多帮助。 我同意@MystikSpiral 的观点,即您所做的事情似乎让用户感到困惑。最好通过防止它们可编辑来指示单元格本身。我不同意创建 UITableViewCell 的子类,因此单元格可以知道它是否可以删除 - 但是它没有地方知道。您的基础数据模型应该能够保存这些信息,然后更改视图以反映这一点变得微不足道。 @MystikSpiral 关键是我事先不知道哪些单元格删除会失败或成功。此外,一般来说,如果用户在没有给出原因的情况下在某些单元格上显示删除按钮,但不是在所有单元格上显示,这可能是不好的;有一个删除按钮是一种向用户说明无法删除的原因的方法。 @WillJenkins 很高兴您同意 MS :-) 但是,请参阅我上面的评论。【参考方案4】:

要在整个表格视图中隐藏任何图标,然后在您的控制器中, 覆盖 EditingStyleForRow 并返回 UITableViewCellEditingStyle.None

    无:将隐藏表格视图项目左侧的任何图标, 删除:将显示删除图标 插入:将显示添加图标

【讨论】:

以上是关于从 UITableViewCell 隐藏删除按钮的主要内容,如果未能解决你的问题,请参考以下文章

如何从 UITableViewCell 中删除按钮?

如何从 swift 中的按钮选项中删除 uitableviewcell?

如何从 UITableViewCell 中的自定义 UIButton 中删除触摸延迟

UITableViewCell 删除按钮动画

如何在 UITableViewCell 单元格中隐藏具有大小的按钮?

如何从自定义操作中进入删除确认状态 UITableViewCell?