我想从我的tableview中拖出一行并将其放入Mac OS X 10.6中的任何其他NSTextField中,并删除一串文本。
拖放已在我的应用程序中运行(在NSTableView和NSBrowser之间),但我没有成功将任何数据放在粘贴板上,除了源应用程序之外的应用程序可以接受。
这是我尝试过的代码,当我进入其他一些NSTextField时,我认为这足以让“hello”这个词被“粘贴”:
-(BOOL) tableView:(NSTableView *)tableView writeRowsWithIndexes:(NSIndexSet *)rowIndexes toPasteboard:(NSPasteboard *)pboard {
[pboard declareTypes:[NSArray arrayWithObject:NSStringPboardType] owner:self];
[pboard setString:@"hello" forType:NSStringPboardType];
return YES;
}
// -
我从未得到显示我将接受掉落的光标,它只是不起作用。
以上都没有奏效。我认为我的概念是正确的:“编码数据,告诉粘贴板你有什么,然后给它数据”,但由于其他应用程序无法识别它,我怀疑我没有告诉粘贴板正确的数据类型。
我哪里错了?
谢谢, 木本
答案 0 :(得分:6)
在控制器类的awakeFromNib
:
- (void)awakeFromNib {
[tableView setDraggingSourceOperationMask:NSDragOperationEvery forLocal:NO];
// [tableView setDraggingSourceOperationMask:NSDragOperationEvery forLocal:YES];
}
(假设您有IBOutlet
连接到名为tableView
的tableView。请务必在awakeFromNib
或更高版本中执行此操作。 (例如,如果您尝试在控制器类的init
方法中执行此操作,则您的nib文件尚未完全加载,并且您的IBOutlet
将全部为nil
并且消息没有效果。)
默认情况下,大多数拖动操作仅限于本地应用程序而不是所有应用程序。 forLocal:
参数指定您是引用应用程序本地(在同一应用程序内)还是非本地(即所有应用程序)的拖动操作。注释掉的行基本上就是你已经使用tableView的行。