首页 > 解决方案 > NSTableViewRowAction - 点击后向后滑动

问题描述

我使用 向我的表格视图添加了滑动功能tableView(_:rowActionsForRow:edge:) -> [NSTableViewRowAction],但我发现当我单击前导按钮时,它工作正常,但它只是不会向后滑动。

这是我的行操作的代码:

extension ViewController: NSTableViewDelegate {
    func tableView(_ tableView: NSTableView, rowActionsForRow row: Int, edge: NSTableView.RowActionEdge) -> [NSTableViewRowAction] {
        // some other codes
        switch edge {
        case .trailing:
            // some other codes
        case .leading:
            let revealInFinderAction = NSTableViewRowAction(style: .regular, title: "Reveal in Finder") { (action, row) in
                self.revealInFinder(row: row)
            }
            revealInFinderAction.backgroundColor = .systemOrange
            return [revealInFinderAction]
        }
    }
}

例如,我的一个按钮执行“在 Finder 中显示”工作(revealInFinderAction ),单击按钮后,它在 Finder 中显示文件,但没有滑回。

我发现 Apple 的邮件应用程序可以完美地处理这个问题,在滑动其中一个单元格后单击标记为已读/未读按钮后,它完成了它的工作并自动滑回。我只是想找到一种方法让同样的事情发生。

我已经对如何实现这一目标进行了研究,但我找不到解决方案,有没有人可以帮助我?我在 macOS 10.14 上使用 Xcode 10 和 Swift 4。

标签: cocoaswift4nstableviewxcode10macos-mojave

解决方案


尝试设置tableView.rowActionsVisible = false,如下所示:

case .leading:
        let revealInFinderAction = NSTableViewRowAction(style: .regular, title: "Reveal in Finder") { (action, row) in
            self.revealInFinder(row: row)
            tableView.rowActionsVisible = false
        }
        revealInFinderAction.backgroundColor = .systemOrange
        return [revealInFinderAction]

推荐阅读