2016-02-10 71 views
0

我有一個NSOutlineView顯示項目列表,我想實現一種文件夾結構。一個文件夾可以包含任意數量的項目。NSOutlineView放在子行不起作用

當用戶創建一個空白文件夾時,我想創建一個小小的放置區域,以便更明顯地知道如何獲取文件夾中的項目。放置區域是文件夾的子項目。與此相似:

basic structure

的問題是,我不能讓NSOutlineView當用戶拖動某項到它突出的下降區域。

這是我到目前爲止有:

- (NSDragOperation)outlineView:(NSOutlineView *)outlineView 
        validateDrop:(id <NSDraggingInfo>)info 
        proposedItem:(id)item 
      proposedChildIndex:(NSInteger)index 
{ 
    // Drag within the outlineview 
    if ([info draggingSource] == outlineView) 
    { 
     if (self.itemBeingDragged) 
     { 

      if ([item isKindOfClass:[MyFolder class]] || 
       [item isKindOfClass:[MyDropArea class]]) 
      { 
       return NSDragOperationMove; 
      } 
      ... other statements (irrelevant here) ... 
     } 
    } 
} 

不應該這樣就夠了嗎? 我確實得到了一個拖動反饋。這是一個高於或低於下拉區域的藍線,但這對我來說無濟於事。

想法任何人?

回答

1

蘋果DragAndDropOutlineView示例項目應該給你一些想法什麼是造成問題:

enter image description here

注意兩個複選框允許你切換正是這種行爲。看看源代碼,看看你能不能弄清楚他們在做什麼。我有一個快速的看,但沒有更多的知識你的代碼,我不能拿出一個答案(所以我不是真的發佈這個答案,更多的是與一張照片的評論!)。

+0

謝謝!事實證明,這個問題是另一回事。但這顯然有助於確保我的代碼正常。 – guitarflow

0

原來我的代碼很好。問題在於我的下落區域有一個圖像視圖,覆蓋整個區域,並帶有一個小圖像:「在這裏放置物品」。

看起來,圖像視圖攔截突出顯示! 當我刪除圖像視圖時,一切正常。 當我添加一個按鈕並在那裏設置圖像而不是創建圖像視圖時,它可以工作。

因此,圖像視圖似乎打破了響應者鏈。無論IB中的「拒絕第一響應者」設置如何,都會發生這種情況。

這是一個艱難的。永遠讓我發現。 希望這可以幫助任何人也遇到這個問題!