如何向右滑动隐藏 UITableView 中的删除按钮?
Posted
技术标签:
【中文标题】如何向右滑动隐藏 UITableView 中的删除按钮?【英文标题】:How to swipe right to hide delete button in UITableView? 【发布时间】:2018-01-31 19:17:41 【问题描述】:当前,当您在表格视图单元格上向左滑动时,我的 UITableView 会显示“删除”按钮。我想在同一个单元格上向右滑动来隐藏这个按钮。它也应该是粘性的,以便在我向右滑动时隐藏 - 就像它在您向左滑动时显示“删除”按钮一样。现在,当我向左滑动以显示删除按钮时,我只能在滚动表格视图时隐藏它。有没有一种内置的方法来实现这种向右滑动隐藏的行为?还是需要定制解决方案?
编辑:我认为默认的 Messages 应用程序有这种行为,但我意识到当我向右滑动时,我稍微滚动了 tableview 导致它隐藏。现在唯一的隐藏方法是点击单元格或滚动表格视图
我已经通过实现以下方法设置了我的 tableView 以显示删除按钮:
override func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath)
if editingStyle == .delete
print("deleted!")
【问题讨论】:
可以分享截图吗?输出如何? 【参考方案1】:是的,我在尝试让用户滑动删除“删除”选项时也遇到了问题。 (类似于 Apple 邮件应用的工作方式)
我发现它按预期工作的唯一方法是,如果您还包括一个leadingSwipeAction...(如果用户最初向右或向左滑动,他们会得到不同的选项)。添加另一侧后,用户就可以将“删除”滑开。
顺便说一句,“Swipe the Delete Away”听起来像是一首令人兴奋的 emo 歌曲。
这是我目前拥有的几乎可以完美运行的代码。偶尔会出现图形异常,前导按钮向右跳,但我认为这可能是由于我认为其他一些代码。这段代码大量借鉴https://chariotsolutions.com/blog/post/uitableview-swipe-actions-in-ios-11/
override func tableView(_ tableView: UITableView, canEditRowAt indexPath: IndexPath) -> Bool
if indexPath.section == Slider.Section.results.rawValue
return true
else
return false
override func tableView(_ tableView: UITableView,
leadingSwipeActionsConfigurationForRowAt indexPath: IndexPath) -> UISwipeActionsConfiguration?
let favoriteAction = self.contextualToggleFavoriteAction(forRowAtIndexPath: indexPath)
return UISwipeActionsConfiguration(actions: [favoriteAction])
override func tableView(_ tableView: UITableView, trailingSwipeActionsConfigurationForRowAt indexPath: IndexPath) -> UISwipeActionsConfiguration?
let delete = UIContextualAction(style: .destructive,
title: "Delete") (contextAction: UIContextualAction, sourceView: UIView, completionHandler: (Bool) -> Void) in
Filter.allMarkers.remove(at: indexPath.row)
tableView.deleteRows(at: [indexPath], with: .fade)
completionHandler(true)
let share = UIContextualAction(style: .normal,
title: "Share") (contextAction: UIContextualAction, sourceView: UIView, completionHandler: (Bool) -> Void) in
print("About to share -> \(Filter.allMarkers[indexPath.row].title ?? "")")
completionHandler(true)
share.backgroundColor = Color.ocean
let swipeConfig = UISwipeActionsConfiguration(actions: [delete, share])
return swipeConfig
func contextualToggleFavoriteAction(forRowAtIndexPath indexPath: IndexPath) -> UIContextualAction
let marker = Filter.allMarkers[indexPath.row]
let action = UIContextualAction(style: .normal,
title: "Favorite") (contextAction: UIContextualAction, sourceView: UIView, completionHandler: (Bool) -> Void) in
if marker.toggleFavoriteFlag()
completionHandler(true)
else
completionHandler(false)
//action.image = UIImage(named: "flag")
action.backgroundColor = marker.isFavorite ? Color.magenta : UIColor.gray
return action
【讨论】:
以上是关于如何向右滑动隐藏 UITableView 中的删除按钮?的主要内容,如果未能解决你的问题,请参考以下文章
如何通过滑动从 Parse 中的 UITableView 中删除对象?
在uitableview单元格上留下滑动删除按钮打开然后返回导致崩溃
UINavigationBar 在中断从左边缘手势向右滑动后显示返回按钮,如何隐藏它以及为啥显示它?