如何在不指定行位置的情况下将内容拖放到NSOutlineView中?

3

我对Cocoa还比较新,在开发一个与NSOutlineView有关的拖放应用程序。

我已经实现了“outlineView:validateDrop:proposedItem:proposedChildIndex”和“outlineView:acceptDrop:item:childIndex:”方法,使得NSOutlineView可以成为拖放的目的地。它一切正常,只是它试图指定另一个NSOutlineView中的项应该被拖放到哪一行/位置。

我的应用程序并不真正需要指定项目应该被放在哪一行或以上; 理想情况下,当我拖放到NSOutlineView上时,我希望整个NSOutlineView框被突出显示。行选择将通过编程方式完成。

我该如何实现这一点?

1个回答

4
你需要使用 NSOutlineViewsetDropItem:dropChildIndex: 来编程设置要插入的索引。
如果要突出显示整个大纲视图,您可以尝试使用 NSTableViewsetDropRow:dropOperation:,将 dropRow 设置为 -1,文档上说:

将 row 值设为 -1,并将操作设置为 NSTableViewDropOn,可以使整个表视图被突出显示,而不是特定行。这在接收器显示的数据不允许用户在特定行位置放置项目时非常有用。

由于 NSOutlineView 继承自 NSTableView,因此如果 NSOutlineView 子类没有破坏 NSTableView 的突出显示行为,这可能有效。

1
看起来对于 NSOutlineView,使用 setDropItem:nil dropChildIndex:-1 就可以解决问题了。 感谢您的指导! - kevinlee
在使用 setDropItem 更改拖放位置后,在 outlineView:validateDrop:proposedItem:proposedChildIndex 中应该返回什么?我正在尝试查找父节点,并且当用户通过子项拖动时,我正在尝试将其重新定位到父项(就像 Finder 应用程序一样)。但是它没有起作用。 - prabhu

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接