如何识别 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) 的当前活动位置?的主要内容,如果未能解决你的问题,请参考以下文章

SwiftUI:如何使用边距 10 修复前导和尾随

如何以标准方式修剪前导/尾随空格?

如何消除“前导和尾随约束……已经存在中心约束”警告

前导和尾随空格剪切 + 中间空格替换

如何删除前导和尾随的空格以及字符串中的多个空格? [复制]

如何删除字符串中的前导零和尾随零? Python