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