在 Mac,将文件拖到我的 NSTableVIew?
On Mac, Drag file to my NSTableVIew?
我希望能够将(任何)文件拖到我的基于视图的 NSTableView 中,所以在委托中我有这样的设置:
class MyViewController: NSViewController, NSTableViewDelegate, NSTableViewDataSource, NSDraggingDestination
{
@IBOutlet var tableView: NSTableView! // connected in storyboard.
override func viewDidLoad()
{
super.viewDidLoad()
tableView.registerForDraggedTypes([NSFilenamesPboardType])
// …
}
func draggingEntered(sender: NSDraggingInfo) -> NSDragOperation
{
println("Drag entered.")
return .Copy
}
func prepareForDragOperation(sender: NSDraggingInfo) -> Bool
{
return true
}
func draggingUpdated(sender: NSDraggingInfo) -> NSDragOperation
{
return .Copy
}
// ...
}
但我的程序只是拒绝对拖放做出反应。当我将文件从 Finder 拖到它并释放时,文件图标会飞回 Finder。我的代码中是否遗漏了什么?
更新:我添加了这个
func performDragOperation(sender: NSDraggingInfo) -> Bool
{
return true
}
但还是不行。我应该在我的视图中而不是委托中实现它吗?该文档说“window 对象或其委托可以实现这些方法;”
如果您查看 Apple 在他们的 "Receiving Drag Operations" documentation 中放置的示例代码,他们放置的最后一个函数实现了:
- (BOOL)performDragOperation:(id <NSDraggingInfo>)sender
您需要实现它,return“YES
”表示拖动成功。
自答:
我偶然发现了 this question, and realized that there are methods that need implement in the datasource sector also; namely these。拖放功能现在可以使用了。
我希望能够将(任何)文件拖到我的基于视图的 NSTableView 中,所以在委托中我有这样的设置:
class MyViewController: NSViewController, NSTableViewDelegate, NSTableViewDataSource, NSDraggingDestination
{
@IBOutlet var tableView: NSTableView! // connected in storyboard.
override func viewDidLoad()
{
super.viewDidLoad()
tableView.registerForDraggedTypes([NSFilenamesPboardType])
// …
}
func draggingEntered(sender: NSDraggingInfo) -> NSDragOperation
{
println("Drag entered.")
return .Copy
}
func prepareForDragOperation(sender: NSDraggingInfo) -> Bool
{
return true
}
func draggingUpdated(sender: NSDraggingInfo) -> NSDragOperation
{
return .Copy
}
// ...
}
但我的程序只是拒绝对拖放做出反应。当我将文件从 Finder 拖到它并释放时,文件图标会飞回 Finder。我的代码中是否遗漏了什么?
更新:我添加了这个
func performDragOperation(sender: NSDraggingInfo) -> Bool
{
return true
}
但还是不行。我应该在我的视图中而不是委托中实现它吗?该文档说“window 对象或其委托可以实现这些方法;”
如果您查看 Apple 在他们的 "Receiving Drag Operations" documentation 中放置的示例代码,他们放置的最后一个函数实现了:
- (BOOL)performDragOperation:(id <NSDraggingInfo>)sender
您需要实现它,return“YES
”表示拖动成功。
自答:
我偶然发现了 this question, and realized that there are methods that need implement in the datasource sector also; namely these。拖放功能现在可以使用了。