使用Swift实现NSTableViewRowAction

时间:2018-04-12 11:46:14

标签: swift macos nstableview

这应该很简单,但我无法理解如何实施此操作。

我使用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会比较简单,我的错误!!

任何帮助表示感谢。

1 个答案:

答案 0 :(得分:3)

在macOS 10.11中添加了可滑动表格,因此要访问您需要在表格委托上实施此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]
    }
}