【问题标题】:NSOutlineView drag imageNSOutlineView 拖动图片
【发布时间】:2012-10-15 20:10:58
【问题描述】:

我想更改从基于视图和数据源的NSOutlineView 拖动项目时使用的图像,但似乎找不到挂钩。我试过修改

- (void)dragImage:(NSImage *)anImage at:(NSPoint)viewLocation offset:(NSSize)initialOffset event:(NSEvent *)event pasteboard:(NSPasteboard *)pboard source:(id)sourceObj slideBack:(BOOL)slideFlag

在 rowViews、tableCellViews 和 NSOutlineView 本身的子类中,但无济于事。

有谁知道默认图像(显然是从 tableCellView 的图像和文本字段中获取的)来自哪里?

【问题讨论】:

    标签: cocoa drag-and-drop nsoutlineview nsdragginginfo nsdraggingitem


    【解决方案1】:

    原来图片是从NSTableCellView获取的。所以钩子是在它的子类中覆盖 -(NSArray *)draggingImageComponents。

    【讨论】:

      【解决方案2】:

      有点尴尬:
      从您的data source,您可以在您通过参数传递的NSDraggingSession 实例上设置图像,例如到tableView:draggingSession:willBeginAtPoint:forRowIndexes:

      然后您可以在NSDraggingSession 实例上使用enumerateDraggingItemsWithOptions:forView:classes:searchOptions:usingBlock: 方法来更改NSDraggingItems 的实际拖动图像:

         [session enumerateDraggingItemsWithOptions:NSDraggingItemEnumerationConcurrent
                                            forView:tableView
                                            classes:[NSArray arrayWithObject:[NSPasteboardItem class]]
                                      searchOptions:nil
                                         usingBlock:^(NSDraggingItem *draggingItem, NSInteger index, BOOL *stop)
          {
             [draggingItem setDraggingFrame:NSMakeRect(0, 0, myWidth, myHeight)
                                   contents:myFunkyDragImage];
          }];
      

      【讨论】:

      • 记录:不要使用 NSMakeRect(0, 0, myWidth, myHeight) 框架是 !!永远不要尝试使用 session.dragginglocation
      • @Xav ??你为什么不呢?在我们的代码库中跨多个操作系统版本轻而易举地工作
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-07-09
      • 1970-01-01
      • 1970-01-01
      • 2010-10-13
      • 2012-08-28
      • 1970-01-01
      相关资源
      最近更新 更多