使用 Swift 实现 NSTableViewRowAction

Implementing NSTableViewRowAction using Swift

这应该很简单,但我不明白如何执行此操作。

我使用 objective-c 找到了这个参考,但我想使用 swift:

- (NSArray<NSTableViewRowAction *> *)tableView:(NSTableView *)tableView rowActionsForRow:(NSInteger)row edge:(NSTableRowActionEdge)edge {
    NSTableViewRowAction *action = [NSTableViewRowAction rowActionWithStyle:NSTableViewRowActionStyleDestructive title:@"Delete"
        handler:^(NSTableViewRowAction * _Nonnull action, NSInteger row) {
        // TODO: You code to delete from your model here.
        NSLog(@"Delete");
    }];
    return @[action];
}

我知道我需要实现功能,但不知道如何实现方法。 我是 macOS 开发的新手,在 App Store 上为 iOS 开发了两个应用程序我认为将它们移植到 MacOS 会相对简单,我的错误!!

感谢任何帮助。

在 macOS 10.11 中添加了可滑动 table,因此要访问您需要在 table 委托上实现此 NSTableViewDelegate 方法的功能。例如,为你的视图控制器添加一个扩展就像这样简单:

extension ViewController: NSTableViewDelegate {

    func tableView(_ tableView: NSTableView, rowActionsForRow row: Int, edge: NSTableRowActionEdge) -> [NSTableViewRowAction] {
        // left swipe
        if edge == .trailing {
            let deleteAction = NSTableViewRowAction(style: .destructive, title: "Delete", handler: { (rowAction, row) in
                // action code
            })

            deleteAction.backgroundColor = NSColor.red
            return [deleteAction]
        }

        let archiveAction = NSTableViewRowAction(style: .regular, title: "Archive", handler: { (rowAction, row) in
            // action code
        })

        return [archiveAction]
    }
}