2017-05-09 91 views
0

我可能犯了一個簡單的錯誤,但我根本無法將文件放到NSCollectionView上,即使以最基本的方式工作。無法拖放到NSCollectionView工作

在一個測試項目中,我在窗口上有一個NSCollectionView,而視圖控制器是它的代表和數據源。我希望能夠將文件從Finder拖到這個集合視圖中。

從閱讀的文檔,都是我應該做的是:

註冊拖累類型:

- (void)viewDidLoad { 

    [super viewDidLoad]; 
    // Do any additional setup after loading the view. 

    NSLog(@"Registering dragged types for collection view: %@", self.collectionView); 
    [self.collectionView registerForDraggedTypes:@[NSFilenamesPboardType]]; 
    [self.collectionView setDraggingSourceOperationMask:NSDragOperationEvery forLocal:YES]; 
    [self.collectionView setDraggingSourceOperationMask:NSDragOperationEvery forLocal:NO]; 
} 

,然後實現這兩個方法:

-(NSDragOperation)collectionView:(NSCollectionView *)collectionView validateDrop:(id<NSDraggingInfo>)draggingInfo proposedIndex:(NSInteger *)proposedDropIndex dropOperation:(NSCollectionViewDropOperation *)proposedDropOperation { 

    NSLog(@"Validate drop: %@", draggingInfo); 

    return NSDragOperationMove; 
} 

-(BOOL)collectionView:(NSCollectionView *)collectionView acceptDrop:(id<NSDraggingInfo>)draggingInfo index:(NSInteger)index dropOperation:(NSCollectionViewDropOperation)dropOperation { 

    NSLog(@"Accept drop: %@", draggingInfo); 

    return YES; 
} 

但是,當我嘗試將項目拖到收藏視圖時,這兩種方法都不會被調用,這使我認爲registerForDraggedTypes:調用未按預期工作。

這裏有什麼問題?還有什麼我必須看看?

+0

重複取代。[實施例用於拖放內部NSCollectionView](http://stackoverflow.com/q/42329390/4244136) – Willeke

回答

1

從OS X 10.11的NSCollectionViewDelegate方法採用索引路徑而不是索引。例如,在

-(NSDragOperation)collectionView:(NSCollectionView *)collectionView validateDrop:(id<NSDraggingInfo>)draggingInfo proposedIndex:(NSInteger *)proposedDropIndex dropOperation:(NSCollectionViewDropOperation *)proposedDropOperation 

proposedIndex:參數是由proposedIndexPath:

- (NSDragOperation)collectionView:(NSCollectionView *)collectionView validateDrop:(id <NSDraggingInfo>)draggingInfo proposedIndexPath:(NSIndexPath * __nonnull * __nonnull)proposedDropIndexPath dropOperation:(NSCollectionViewDropOperation *)proposedDropOperation 
+0

謝謝。注意:Xcode自動完成提示永遠不會被調用的舊版(錯誤)版本。它仍然存在於NSCollectionView.h中,並且雖然標記爲「舊」,但沒有提及它不再適用。 – fbitterlich