当我将行从 NSTableView 拖动到另一个 NSOutlineView 时,NSOutlineView 会出现黄色突出显示边框。我该如何避免这种情况?
准确地说,只有当我将表中的行拖到 NSTableView 的可用空间(即不在任何项目上)时,才会发生这种情况。但是,当我将行直接拖动到 NSOutlineView 中的项目上时,黄色边框不会显示,但(当然)项目会自行选择。
NSOutlineViews 数据源中的 outlineView:validateDrop:proposedItem:proposedChildIndex:
的重要部分如下所示:
- (NSDragOperation)outlineView:(NSOutlineView *)outlineView
validateDrop:(id <NSDraggingInfo>)info
proposedItem:(id)item
proposedChildIndex:(NSInteger)index
{
if ([info draggingSource] == myOtherTableView) {
[outlineView setDropItem:item
dropChildIndex:NSOutlineViewDropOnItemIndex];
return NSDragOperationMove;
}
return NSDragOperationNone;
}
感谢您的帮助!
最佳答案
当 NSOutlineView 提议不在任何特定项目上放置时(导致您看到的整个边框突出显示),它将传入 nil 的 item
并NSOutlineViewDropOnItemIndex 的 propishedChildIndex
。您可以对此进行测试,以判断 NSOutlineView
何时建议进行此放置,并返回 NSDragOperationNone
以根本不允许在该区域进行放置。
- (NSDragOperation)outlineView:(NSOutlineView *)outlineView
validateDrop:(id <NSDraggingInfo>)info
proposedItem:(id)item
proposedChildIndex:(NSInteger)index
{
if ([info draggingSource] == myOtherTableView) {
if (item == nil)
return NSDragOperationNone;
else
{
[outlineView setDropItem:item
dropChildIndex:NSOutlineViewDropOnItemIndex];
return NSDragOperationMove;
}
}
return NSDragOperationNone;
}
关于objective-c - NSOutlineView:拖动项目时避免出现黄色边框?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3439352/