gpt4 book ai didi

macos - 如何使用 NSFilePromiseProvider 写入粘贴板

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

我正在尝试使用新的 NSPasteboardWriting API 支持使用 NSTableViewNSCollectionView 进行多项目拖动。在我的真实应用程序中,我可以为 TableView 进行拖动,但不能为 Collection View 进行拖动(NSFilePromiseProviderDelegate 方法永远不会被调用)。当我尝试从头开始构建演示应用程序时,我能够使用 NSTableView 重现此内容。

我已经在 DragDelegate 的两个方法中设置了断点,但都没有被调用。不过,-tableView:pasteboardWriterForRow: 确实被调用了。当我拖动到应用程序外部时,我看到该行的图像附加到光标,但就 Finder 而言,粘贴板上没有文件。没有选项可以拖放到 Dock 或 Finder 窗口上。

CollectionController 的实例被设置为我的表格 View 的dataSource。它有一个列,其文本标签绑定(bind)到所表示的对象(因为它只是一个 NSString)。我在 Mojave 10.14.0 上运行 Xcode 10.0。以下是我的类(class):

集合 Controller

@interface CollectionController : NSObject <NSTableViewDataSource>

@property (strong) id<NSFilePromiseProviderDelegate> dragDelegate;

@end

@implementation CollectionController

- (NSInteger)numberOfRowsInTableView:(NSTableView *)tableView {
return 1;
}

- (id)tableView:(NSTableView *)tableView objectValueForTableColumn:(NSTableColumn *)tableColumn
row:(NSInteger)row
{
return @"Test string";
}

- (id<NSPasteboardWriting>)tableView:(NSTableView *)tableView pasteboardWriterForRow:(NSInteger)row {
self.dragDelegate = [[DragDelegate alloc] init];
return [[NSFilePromiseProvider alloc] initWithFileType:@"public.text"
delegate:self.dragDelegate];

return prov;
}

@end

拖动委托(delegate)

@interface DragDelegate: NSObject <NSFilePromiseProviderDelegate>

@end

@implementation DragDelegate

- (NSString *)filePromiseProvider:(NSFilePromiseProvider *)filePromiseProvider
fileNameForType:(NSString *)fileType
{
return @"file.txt";
}

- (void)filePromiseProvider:(NSFilePromiseProvider *)filePromiseProvider
writePromiseToURL:(NSURL *)url
completionHandler:(void (^)(NSError * _Nullable))completionHandler
{
NSData *data = [@"test file contents" dataUsingEncoding:NSUTF8StringEncoding];
[data writeToURL:url atomically:YES];
completionHandler(nil);
}

@end

最佳答案

设置默认的拖动操作

 - (void)setDraggingSourceOperationMask:(NSDragOperation)mask forLocal:(BOOL)isLocal;

关于macos - 如何使用 NSFilePromiseProvider 写入粘贴板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52998215/

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