代码之家  ›  专栏  ›  技术社区  ›  Dov

如何使用NSFilePromiseProvider写入粘贴板

  •  0
  • Dov  · 技术社区  · 7 年前

    NSTableView NSCollectionView 使用新的 NSPasteboardWriting API。在我真正的应用程序中,我已经为我的表视图工作了,但是没有为我的集合视图工作(表视图) NSFilePromiseProviderDelegate NSTableView .

    DragDelegate ,两个都没人打电话。 -tableView:pasteboardWriterForRow:

    一个例子 CollectionController 设置为我的表视图 dataSource . 它只有一个列,其文本标签绑定到表示的对象(因为它只是一个 NSString ). 我正在Mojave10.14.0上运行Xcode10.0。以下是我的课程:

    @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
    

    @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
    
    1 回复  |  直到 7 年前
        1
  •  2
  •   Willeke    7 年前

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