我有一个绑定(bind)到NSArrayController的NSCollectionView。我想要拖放工作,所以我创建了一个委托(delegate)并实现了方法
-(BOOL)collectionView:(NSCollectionView *)collectionView canDragItemsAtIndexes:(NSIndexSet *)indexes withEvent:(NSEvent*)event
-(BOOL)collectionView:(NSCollectionView *)collectionView acceptDrop:(id < NSDraggingInfo >)draggingInfo index:(NSInteger)index dropOperation:(NSCollectionViewDropOperation)dropOperation
-(NSDragOperation)collectionView:(NSCollectionView *)collectionView validateDrop:(id < NSDraggingInfo >)draggingInfo proposedIndex:(NSInteger *)proposedDropIndex dropOperation:(NSCollectionViewDropOperation *)proposedDropOperation
-(NSArray *)collectionView:(NSCollectionView *)collectionView namesOfPromisedFilesDroppedAtDestination:(NSURL *)dropURL forDraggedItemsAtIndexes:(NSIndexSet *)indexes
我对两个BOOL方法返回YES,对validateDrop:方法返回NSDragOperationMove,对namesOfPromisedFilesDroppedAtDestination:方法返回一个空数组。我在每个方法的第一行中都有一个NSLog语句,因此我可以看到它们何时被调用。
现在,唯一被调用的方法是canDragItemsAtIndexes :(我返回YES)。我看到它被调用了,但是任何进一步的拖动都会修改选择。其余的永远不会被调用。
如果我使NSCollectionView不支持选择,则不会调用该方法。
我确定我错过了一些非常明显的东西,但我不知道这是什么。有没有人拖放过与NSCollectionViews一起工作的资料,可以阐明一些想法?
最佳答案
我想您会错过将拖动内容写入粘贴板的部分。
要支持拖放,您必须执行以下步骤:
YES
,则将内容写入粘贴板写入粘贴板应在
- collectionView:writeItemsAtIndexes:toPasteboard:
您还必须向
- registerForDraggedTypes:
注册拖动的类型一些示例代码:
http://developer.apple.com/library/mac/#samplecode/IconCollection/Introduction/Intro.html
关于objective-c - NSCollectionView拖放: Most Delegate Events Not Getting Called,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5825833/