我有一個NSTableView
,我希望能夠拖放行來移動它們,並拖拽時按住Option(按照Apple's documentation)複製它們。如何通過在NSTableView中拖動行來允許移動和複製?
我在我的視圖控制器,這也是dataSource
的表視圖中有以下代碼。
- (void)awakeFromNib {
[self.tableView registerForDraggedTypes:@[kRowIndexesPasteboardType]];
}
- (BOOL)tableView:(NSTableView *)tableView writeRowsWithIndexes:(NSIndexSet *)rowIndexes toPasteboard:(NSPasteboard *)pasteboard {
NSData *data = [NSKeyedArchiver archivedDataWithRootObject:rowIndexes];
[pasteboard declareTypes:@[kRowIndexesPasteboardType] owner:self];
[pasteboard setData:data forType:kRowIndexesPasteboardType];
return YES;
}
- (NSDragOperation)tableView:(NSTableView *)tableView validateDrop:(id <NSDraggingInfo>)info proposedRow:(NSInteger)row proposedDropOperation:(NSTableViewDropOperation)dropOperation {
// Only allow dropping above/below.
return dropOperation == NSTableViewDropAbove ? (NSDragOperationMove|NSDragOperationCopy) : NSDragOperationNone;
}
- (BOOL)tableView:(NSTableView *)tableView acceptDrop:(id <NSDraggingInfo>)info row:(NSInteger)row dropOperation:(NSTableViewDropOperation)dropOperation {
if (dropOperation == NSTableViewDropAbove) {
NSPasteboard* pasteboard = [info draggingPasteboard];
NSData* rowData = [pasteboard dataForType:kRowIndexesPasteboardType];
NSIndexSet* rowIndexes = [NSKeyedUnarchiver unarchiveObjectWithData:rowData];
BOOL copy = ???;
if (copy) {
// Copy items at rowIndexes to row.
} else {
// Move items at rowIndexes to row.
}
return YES;
}
return NO;
}
- 我怎樣才能使默認的拖動操作是移動的,當選項鍵被按下只被複製?目前它默認爲直接複製。
- 在
tableView:acceptDrop:row:dropOperation:
如何判斷操作是複製操作還是放置操作?
拖動這個項目時'draggingSourceOperationMask'爲-1,這意味着當我只想'NSDragOperationMove'時,返回'NSDragOperationCopy&NSDragOperationMove'。 – DanielGibbs