and*_*n22 4 macos cocoa drag-and-drop objective-c nscollectionview
我已经将NSCollectionView子类化了,我正试图从Finder接收拖动的文件.我正在接收draggingEntered:并返回一个合适的值,但我从未接收过prepareForDragOperation:(在此过程中也没有接收过任何方法).有什么明显的东西我在这里不见了吗?
码:
- (void)awakeFromNib
{
[self registerForDraggedTypes:[NSArray arrayWithObjects:NSFilenamesPboardType, nil]];
}
- (NSDragOperation)draggingEntered:(id <NSDraggingInfo>)sender
{
NSLog(@"entered"); //Happens
NSPasteboard *pboard;
NSDragOperation sourceDragMask;
sourceDragMask = [sender draggingSourceOperationMask];
pboard = [sender draggingPasteboard];
if ([[pboard types] containsObject:NSFilenamesPboardType])
{
NSLog(@"copy"); //Happens
return NSDragOperationCopy;
}
return NSDragOperationNone;
}
- (BOOL)prepareForDragOperation:(id <NSDraggingInfo>)sender
{
NSLog(@"prepare"); //Never happens
return YES;
}
Run Code Online (Sandbox Code Playgroud)
这已经很晚了,但我发现了问题:
NSCollectionView以静默方式提供以下不兼容的实现:
-(NSDragOperation)draggingUpdated:(id<NSDraggingInfo>)sender
Run Code Online (Sandbox Code Playgroud)
......并且Apple没有记录这一点.如果您只是实现该方法来重新调用draggingEntered方法,一切正常,例如:
-(NSDragOperation)draggingUpdated:(id<NSDraggingInfo>)sender
{
return [self draggingEntered:sender];
}
Run Code Online (Sandbox Code Playgroud)
(我来到SO希望找到这个自定义实现提供的"魔法"的解释,因为那也是......没有文档(谢谢,Apple!).我猜它在管理内插点方面做得很聪明CollectionView?).
更新:似乎特殊魔法在NSCollectionView的委托对象中.由于某种原因,Xcode4声称没有代表给我,但分配它建立并运行正常.查看那里的所有自定义/半文档拖放方法.
(或者就像我上面描述的那样并覆盖自定义行为,并实现有效的东西,你可以理解)
| 归档时间: |
|
| 查看次数: |
2543 次 |
| 最近记录: |