writeRowsWithIndexes没有使用自定义单元格在NSTableView中调用

时间:2014-09-09 12:27:05

标签: objective-c macos cocoa nstableview

我已经实现了以下委托来支持NSTableView中的拖放操作。委托validateDrop和acceptDrop被调用,我可以将内容从Finder拖放到NSTableView,但是当我尝试从NSTableView拖放项目并放到Finder时,不会调用writeRowsWithIndexes。

- (BOOL)tableView:(NSTableView *)aTableView writeRowsWithIndexes:(NSIndexSet *)rowIndexes toPasteboard:(NSPasteboard *)pboard
{
  NSLog(@"writeRowsWithIndexes");
  return YES;
}

- (NSDragOperation)tableView:(NSTableView *)aTableView validateDrop:(id < NSDraggingInfo >)info proposedRow:(NSInteger)row proposedDropOperation:(NSTableViewDropOperation)operation
{
 NSLog(@"validateDrop");
 return NSDragOperationCopy;
}

- (BOOL)tableView:(NSTableView *)aTableView acceptDrop:(id < NSDraggingInfo >)info row:(NSInteger)row dropOperation:(NSTableViewDropOperation)operation
{
NSLog(@"acceptDrop"); 
return YES;
}

我已将拖动类型注册为

//Registering dragged Types
[tableView registerForDraggedTypes:[NSArray arrayWithObjects:NSFilenamesPboardType, nil]];
//To support across application passing NO
[tableView setDraggingSourceOperationMask:NSDragOperationCopy forLocal:NO];
//Don't want any highlight selection on drop
[tableView setDraggingDestinationFeedbackStyle:NSTableViewDraggingDestinationFeedbackStyleNone];

拖拽不是在我的NSTableView中启动的,任何人都可以告诉我可能的原因是什么?我在TableView中有自定义单元格,并且还正确设置了委托和数据源。

1 个答案:

答案 0 :(得分:0)

我找到了原因,这是由于Custom cell。我已经从NSButtonCell子类化了我的自定义单元格。拖动不适用于按钮单元格,因为按钮不适用于拖动,它们用于照明。 我通过从NSActionCell对我的自定义单元进行子类化来解决了这个问题。

在以下帖子中找到: NSTableView Drag and Drop not working