1

我正在实现 NSTableView 行拖放。我正在使用这里的示例Drag & Drop Reorder Rows on NSTableView

实际上,当我在表中拖动一行时,我的数据源方法被调用,这实际上进展得相当顺利。但是,我在使用 Xamarin 中的 NSDraggingInfo.EnumerateDraggingItems 方法时遇到了问题。

示例 Swift 代码是:

info.enumerateDraggingItemsWithOptions([], forView: tableView, classes: [NSPasteboardItem.self], searchOptions: [:]) {
    if let str = ($0.0.item as! NSPasteboardItem).stringForType("public.data"), index = Int(str) {
        oldIndexes.append(index)
    }
}

我遇到的问题是classes: [NSPasteboardItem.self].

Xamarin 方法的签名是:

EnumerateDraggingItems(NSDraggingItemEnumerationOptions, NSView, NSPasteboardReading[], NSDictionary, NSDraggingEnumerator)
EnumerateDraggingItems(NSDraggingItemEnumerationOptions, NSView, NSArray, NSDictionary, NSDraggingEnumerator)
EnumerateDraggingItems(NSDraggingItemEnumerationOptions, NSView, IntPtr, NSDictionary, NSDraggingEnumerator)

如何为参数提供所需的classes参数?

4

1 回答 1

0

似乎 xamarin 版本不正确(查看 github 上的源代码https://github.com/xamarin/xamarin-macios/blob/master/src/AppKit/NSDraggingSession.cs):

EnumerateDraggingItems(NSDraggingItemEnumerationOptions, NSView, NSPasteboardReading[], NSDictionary, NSDraggingEnumerator)

因为 classes 参数应该是类定义数组而不是实例。使用这个版本

EnumerateDraggingItems(NSDraggingItemEnumerationOptions, NSView, NSArray, NSDictionary, NSDraggingEnumerator)

类数组可以这样创建:

var classesArray = NSArray.FromIntPtrs(new IntPtr[] {
    ObjCRuntime.Class.GetHandle(typeof(NSPasteboardItem))
});

没有测试过这个。

于 2020-02-01T22:17:15.023 回答