2017-10-13 165 views
0

我实施了NSOutlineView的拖放功能&。我可以拖入新项目并重新排列项目。然而,有一个奇怪的行为当拖入时,NSOutlineView不显示蓝色向导/分隔符

如果一个或多个项目已重新排序(通过拖动&掉下来了),当一个新项目被拖动,该NSOutlineView不显示通常的“蓝分离器行“在两行之间(它可以接受放置)。相反,与本地重新排序相同的动画会打开一个缺口

如果没有项目重新排序,则蓝色线条显示如常。

NSOutlineView仅填充NSOutlineViewDataSource。它刚刚从“可可绑定”(与NSTreeController)的设置中迁移,该设置在没有此问题的情况下运行。

回答

1

这个NSTableViewDraggingDestinationFeedbackStyle控制分离行为。

我不小心注释掉线outlineView.draggingDestinationFeedbackStyle = .sourceList

func outlineView(_ outlineView: NSOutlineView, 
       draggingSession session: NSDraggingSession, 
       willBeginAt screenPoint: NSPoint, 
       forItems draggedItems: [Any]) 
{ 
    outlineView.draggingDestinationFeedbackStyle = .gap 
} 

func outlineView(
     _ outlineView: NSOutlineView, 
     draggingSession session: NSDraggingSession, 
     endedAt screenPoint: NSPoint, 
     operation: NSDragOperation) 
    { 
     outlineView.draggingDestinationFeedbackStyle = .sourceList 
    }