我正在尝试为我的 NSTableView 设置非常基本的拖放操作。表格视图只有一列(带有自定义单元格)。该列绑定到 NSArrayController,而数组控制器的内容数组绑定到我的控制器对象上的 NSArray。数据在表中显示良好。我将 table view 的dataSource
和delegate
outlets 连接到我的控制器对象,然后实现了这些方法:
- (BOOL)tableView:(NSTableView *)aTableView writeRowsWithIndexes:(NSIndexSet *)rowIndexes toPasteboard:(NSPasteboard *)pboard
{
NSLog(@"dragging");
return YES;
}
- (NSDragOperation)tableView:(NSTableView*)tv validateDrop:(id <NSDraggingInfo>)info proposedRow:(NSInteger)row proposedDropOperation:(NSTableViewDropOperation)op
{
return NSDragOperationEvery;
}
- (BOOL)tableView:(NSTableView *)aTableView acceptDrop:(id <NSDraggingInfo>)info
row:(NSInteger)row dropOperation:(NSTableViewDropOperation)operation
{
return YES;
}
我还在以下位置注册了拖动类型-awakeFromNib
:
#define MyDragType @"MyDragType"
- (void)awakeFromNib
{
[super awakeFromNib];
[_myTable registerForDraggedTypes:[NSArray arrayWithObjects:MyDragType, nil]];
}
问题是 -tableView:writeRowsWithIndexes:toPasteboard: 方法从未被调用过。我看过一堆例子,但我无法弄清楚我做错了什么。问题可能是我正在使用自定义单元格吗?我应该在单元子类中覆盖某些东西以启用此功能吗?
编辑:确认。将自定义单元格切换为常规 NSTextFieldCell 可以进行拖动。现在,如何使用自定义单元格进行拖放操作?