gpt4 book ai didi

c# - Xcode Cocoa - 从 NSTableView 拖放到 Finder

转载 作者:行者123 更新时间:2023-12-03 17:47:46 24 4
gpt4 key购买 nike

我希望我的 MacOS 应用程序能够将项目从 NSTableView 拖动到其他应用程序,例如 Logic Pro X、Finder 等。此 TableView 中的项目是我创建的类,它们代表我的硬盘上的文件。

public class AudioFile
{
#region Computed Propoperties
public string Filename { get; set; } = "";
public string Filepath { get; set; } = "";
#endregion

public AudioFile()
{
}

public AudioFile(string filename, string filepath)
{
this.Filename = filename;
this.Filepath = filepath;
}
}

不幸的是,我找不到 Swift 或 Objective-C 的解决方案,可以将其转换为 C# (Xamarin)。有谁知道或有一些代码可以在这里提供帮助吗?

感谢您的帮助!

最佳答案

我对 C# 一无所知,但您要求使用 Swift 或 Objective-C 提供解决方案。我可以帮忙!下面是 Swift 4。

首先,确保您的ViewController是表格 View 的数据源:

class ViewController: NSViewController, NSTableViewDataSource

您还需要在代码或 IB 中建立该连接。

然后,您需要将表格 View 设置为拖动源。选择您想要的操作,通常是 .move.copy:

tableView.setDraggingSourceOperationMask(.move, forLocal: false)

此示例假设您使用 ArrayController 来管理 tableView 的内容。你确实应该这样做,这会让很多事情变得更容易。另外,此示例用于拖动多个文件。 (它适用于单个文件,但如果您只想拖动一个文件,还有其他方法。)

在您的 ViewController 类中,实现此方法:

func tableView(_ tableView: NSTableView, writeRowsWith rowIndexes: IndexSet, to pboard: NSPasteboard) -> Bool {
var filePaths = [String]()

// Swift 4 hack--the FilenamesPboardType is missing
let NSFilenamesPboardTypeTemp = NSPasteboard.PasteboardType("NSFilenamesPboardType")
pboard.addTypes([NSFilenamesPboardTypeTemp], owner: nil)

if let audioFiles = audioFilesArrayController.arrangedObjects as? [AudioFile] {
for i in rowIndexes {
filePaths.append(audioFiles[i].Filepath)
}
}

pboard.setPropertyList(filePaths, forType: NSFilenamesPboardTypeTemp)

return true
}

您可以了解有关 NSFilenamesPboardTypeTemp hack here 的更多信息.

就是这样!重新编译,您应该能够通过将一个或多个文件拖到 Finder 窗口来移动它们。简单的。 :-)

关于c# - Xcode Cocoa - 从 NSTableView 拖放到 Finder,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45734914/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com