首页 > 解决方案 > 如何识别 UITableView 前导和尾随滑动操作 (ios 11) 的当前活动位置?

问题描述

在 iOS 11 中,Apple 引入了两种新方法,在 UITableView 中在行的前沿和后沿处理 Swipe-Actions(这些方法是作为 UITableViewDelegate 的一部分引入的):

tableView( :leadingSwipeActionsConfigurationForRowAt:) tableView( :trailingSwipeActionsConfigurationForRowAt:)

但是,无法识别当前活动的 Swipe-Action。

标签: iosswift

解决方案


Swift 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
}

推荐阅读