【问题标题】:NSOutlineView: Hot To Avoid Yellow Border When Dragging Items?NSOutlineView:拖动项目时避免黄色边框很热?
【发布时间】:2010-08-09 11:01:24
【问题描述】:

当我将行从 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;
}

感谢您的帮助!

【问题讨论】:

  • 选择颜色边框似乎表明放置是有效的;即,用户可以放在这里,拖动的项目实际上会下降,而不是弹回。这是一个功能,我不明白你为什么要屏蔽它。
  • @Peter Hosey - 您应该将其移至答案。有时,“我该怎么做”的答案是“不要那样做”。

标签: objective-c cocoa drag-and-drop nstableview nsoutlineview


【解决方案1】:

NSOutlineView 建议不放置在任何特定项目上时(导致您看到的整个边框突出显示),它将传入一个 nil 的 item 和一个 NSOutlineViewDropOnItemIndex 的 proposedChildIndex。您可以对此进行测试以判断 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;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-04-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多