gpt4 book ai didi

cocoa - 将字符串数据从我的 Cocoa 应用程序拖动到第三方 Cocoa 应用程序

转载 作者:行者123 更新时间:2023-12-03 16:26:16 27 4
gpt4 key购买 nike

我想从我的表格 View 中拖动一行并将其放入 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;

}

//--

我从来没有得到显示我将接受放置的光标,而且它不起作用。

  • 我尝试过的事情:
    • 使用 10.5 版本的粘贴板标识符,NSStringPBoardType
    • 使用10.6版本,NSPasteboardTypeString。
    • 设置所有者 = nil,因为我不懒惰地提供数据。
    • 使用键控存档器:[pboard setData:[NSKeyedArchiver archivedRootObject:@"Hello!!"]]

以上方法均无效。我认为我的概念是正确的:“编码数据,告诉粘贴板你有什么,然后给它数据”,但由于其他应用程序无法识别它,我怀疑我没有告诉粘贴板正确的数据类型。

我哪里出错了?

谢谢,伍迪

最佳答案

将其添加到 Controller 类的 awakeFromNib 中:

- (void)awakeFromNib {
[tableView setDraggingSourceOperationMask:NSDragOperationEvery forLocal:NO];
// [tableView setDraggingSourceOperationMask:NSDragOperationEvery forLocal:YES];

}

(假设您有一个 IBOutlet 连接到名为 tableView 的 tableView)。请务必在 awakeFromNib 或更高版本中执行此操作。 (例如,如果您尝试在 Controller 类的 init 方法中执行此操作,则您的 nib 文件尚未完全加载,并且您的 IBOutlet 将全部为 nil 并且该消息不会产生任何效果)。

默认情况下,大多数拖动操作将仅限于本地应用程序而不是所有应用程序。 forLocal: 参数指定您引用的是应用程序本地(同一应用程序内)的拖动操作,还是非本地(即所有应用程序)。注释掉的行基本上就是您已经让 tableView 执行的操作。

关于cocoa - 将字符串数据从我的 Cocoa 应用程序拖动到第三方 Cocoa 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4511326/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com