【问题标题】:Change selected items on start of drag in NSOutlineView on Mac在 Mac 上的 NSOutlineView 中更改拖动开始时的选定项目
【发布时间】:2020-05-02 12:30:10
【问题描述】:

我有一个基于视图的 NSOutlineView(用 Objective C 编写),它支持从树中的任何行拖动。不允许用户多行选择。我调整了 outlineView:acceptDrop:item:childIndex 委托方法中删除的内容,以自动包含所有必要的父行和子行。实际拖动操作正常。

我的问题是被拖动的视觉组件。在进行选择时,我可以使用 outlineView:selectionIndexesForProposedSelection 来修改选择。 (我的视觉选择风格是 NSTableViewSelectionHighlightStyleNone)。这也可以找到,因为所需的组件在拖动中直观地表示。

问题是用户不必选择一行来开始拖动。当以这种方式开始拖动时,不会调用 outlineView:selectionIndexesForProposedSelection,并且在拖动过程中只显示被拖动的行。实际的拖动操作仍然按预期工作。

我已经使用了所有数据源和委托方法,但我似乎无法找到一种方法来更改最初拖动的内容,以便 NSOutlineView 将显示我包含的行的图像。

似乎 outlineView:updateDraggingItemsForDrag 应该可以工作,但它不允许我更改拖动源。

似乎 NSOutlineView 决定在拖动过程中突出显示的内容是基于选择的。无论我在粘贴板上放置了多少项目,它始终是突出显示的选定项目。

关于如何在拖动开始时强制更改选择的任何想法?

【问题讨论】:

    标签: macos drag-and-drop selection nsoutlineview


    【解决方案1】:

    事实证明,简单地继承 NSOutlineView 并使用 mouseDown 我可以在其他任何事情开始之前安全地进入。将选择设置为后续可能的工作正常,并且似乎不会在同一次单击时弄乱可能的选择更改。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-11-03
      • 1970-01-01
      • 1970-01-01
      • 2020-09-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多