如何识别 UITableView 前导和尾随滑动操作 (ios 11) 的当前活动位置?
Posted
技术标签:
【中文标题】如何识别 UITableView 前导和尾随滑动操作 (ios 11) 的当前活动位置?【英文标题】:How do i identify the current active position of UITableView Leading & Trailing Swipe Actions (ios 11)? 【发布时间】:2018-08-20 09:59:48 【问题描述】:在 ios 11 中,Apple 引入了两种新方法来处理 UITableView 中行的前沿和后沿的 Swipe-Actions(这些方法是作为 UITableViewDelegate 的一部分引入的):
tableView(:leadingSwipeActionsConfigurationForRowAt:) tableView(:trailingSwipeActionsConfigurationForRowAt:)
但是,无法识别当前活动的 Swipe-Action。
【问题讨论】:
【参考方案1】:斯威夫特 4: 幸运的是,我能够帮助自己,并想与您分享我的解决方案:
extension UITableView
enum SwipeActionPosition
case unknown, leading, trailing
var activeSwipeActionPosition:SwipeActionPosition
var position = SwipeActionPosition.unknown
for view in subviews
if String(describing: type(of:view) ) == "UISwipeActionPullView"
if view.frame.origin.x > 0.0 && view.frame.origin.x < self.frame.width
position = .trailing
else if view.frame.origin.x == 0.0
position = .leading
break
return position
例子:
if self.tableView.activeSwipeActionPosition == .leading
//active leading swipe action
else if self.tableView.activeSwipeActionPosition == .trailing
//active trailing swipe action
else
//unknown
【讨论】:
当用户从左侧滑动tableView(:leadingSwipeActionsConfigurationForRowAt:)
时调用,当用户从右侧滑动tableView(:trailingSwipeActionsConfigurationForRowAt:)
时调用。因此,对于不同的滑动方向,不同的代表会调用。现在你想确定什么?
@dahiya_boy:在我的例子中,关闭新的拖尾滑动动作的滑动手势似乎没有很好地实现(只有在单元格上的部分区域上点击或滑动才能关闭动作)。因此,我找到了配置一个不可见的前导滑动动作的解决方案,以便在两个方向上都支持完整的滑动手势,但仅限于活动的尾随滑动动作。为了停止显示领先的滑动动作(在我的情况下不需要),我需要一种方法来识别当前的活动动作。以上是关于如何识别 UITableView 前导和尾随滑动操作 (ios 11) 的当前活动位置?的主要内容,如果未能解决你的问题,请参考以下文章