在Mac上的NSOutlineView中改变开始拖动时的选定项目

问题描述 投票:-1回答:1

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

我的问题在于被拖动的视觉组件。 我可以使用 outlineView:selectionIndexesForProposedSelection(选择指数)。 来修改选择时的选择。我的可视化选择风格是 NSTableViewSelectionHighlightStyleNone。). 这也是可行的,因为所需的组件在拖动中得到了直观的体现。

问题是用户不需要选择一行来开始拖动。当拖动以这种方式开始时 outlineView:selectionIndexesForProposedSelection(选择指数)。 不被调用,在拖动过程中只显示被拖动的行。 实际的拖动操作仍然可以正常工作。

我使用了所有的数据源和委托方法,但似乎找不到一种方法来改变最初拖动的内容,使 NSOutlineView 能够显示我包含的行的图像。

好像是 outlineView:updateDraggingItemsForDrag(拖拽)。 应该可以工作,但它不能让我更改拖动的来源。

似乎 NSOutlineView 在拖动过程中决定高亮的内容是基于选择的。 无论我在粘贴板上放置了多少项,高亮显示的总是被选中的项。

有什么办法可以在拖动开始时强制改变选择?

macos drag-and-drop selection nsoutlineview
1个回答
0
投票

原来只是简单的子类化 NSOutlineView 并使用 鼠标点击 我在其他事情开始之前安全进入。 设置选择工作正常,因为后续的可能,似乎并没有搞砸了一个可能的选择改变在同一点击。

© www.soinside.com 2019 - 2024. All rights reserved.