我正在实现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参数提供所需的实参?
发布于 2020-02-02 06:17:15
似乎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)classes数组可以像这样创建:
var classesArray = NSArray.FromIntPtrs(new IntPtr[] {
ObjCRuntime.Class.GetHandle(typeof(NSPasteboardItem))
});还没有对此进行测试。
https://stackoverflow.com/questions/59720746
复制相似问题