【发布时间】:2010-01-11 16:05:35
【问题描述】:
好的,我有一个名为“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 子类(称为“日历”)中发送了 [self registerForDraggedTypes:[NSArray arrayWithObjects:TASK_UTI, nil]]。 我已经实现了这些方法:
- (NSDragOperation)draggingEntered:(id < NSDraggingInfo >)sender
- (BOOL)prepareForDragOperation:(id < NSDraggingInfo >)sender
- (BOOL)performDragOperation:(id < NSDraggingInfo >)sender
在我的日历(NSMatrix 子类)类中。
一些调试显示 NSMatrix/Calendar 对象甚至没有运行上面的拖动方法。什么给了?
【问题讨论】:
-
“我在我的 NSMatrix 子类中发送了 [self registerForDraggedTypes:[NSArray arrayWithObjects:TASK_UTI, nil]]……”你确定吗?你是通过什么方式发送的?您是否使用
NSLog来证明该代码已运行? -
我在 -awakeFromNib 方法中运行它,是的,我运行了 NSLog 代码:NSLog(@"Registered Drag types:%@", [[self registeredDraggedTypes] description]);结果如下: 2010-01-11 18:54:59.963 Planner[48548:a0f] Registered Drag types:( "com.yourcompany.YGPlannerTask" )
标签: objective-c cocoa drag-and-drop