帮助内部应用程序拖放 - 可可

时间:2010-01-11 16:05:36

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

好的,我有一个名为“Task”的自定义类,它代表了要完成的任务。我有一个NSMatrix作为日历。我希望用户能够将nscollectionview中的图标(我已经毫无困难地设置nscollectionview)拖到nsmatrix中的单元格上,从而将该任务分配到当天。我似乎无法让nsmatrix对拖拽或掉落做出反应。

我已经实现了这个方法:

- (BOOL)collectionView:(NSCollectionView *)cv writeItemsAtIndexes:(NSIndexSet *)indexes toPasteboard:(NSPasteboard *)pasteboard
{
    [pasteboard declareTypes:[NSArray arrayWithObject:TASK_UTI]  owner:self];
    NSUInteger index=[indexes firstIndex];
    Task* task=[[cv content] objectAtIndex:index];
    NSData* taskData=[NSKeyedArchiver archivedDataWithRootObject:task];
    [taskData retain];
    BOOL success=[pasteboard setData:taskData forType:TASK_UTI];

    return success;
}

在我的nscollectionview委托中,如上所示。 我在我的NSMatrix子类(称为“Calendar”)中发送了[self registerForDraggedTypes:[NSArray arrayWithObjects:TASK_UTI,nil]]。 我已经实现了这些方法:

- (NSDragOperation)draggingEntered:(id < NSDraggingInfo >)sender
- (BOOL)prepareForDragOperation:(id < NSDraggingInfo >)sender
- (BOOL)performDragOperation:(id < NSDraggingInfo >)sender

在我的Calendar(NSMatrix子类)类中。

某些调试显示NSMatrix / Calendar对象甚至没有运行上面的拖动方法。是什么给了什么?

2 个答案:

答案 0 :(得分:0)

您是否定义了Calendar类来实现拖动目标协议?

答案 1 :(得分:0)

首先,您应该在UTI中使用您自己的域名,而不是“com.yourcompany”。

第二,你有export the UTI in your Info.plist吗?