- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我创建了一个应用程序,它有一个代表一系列文件的 NSTableView。由此,我希望能够将一行(即文件名)从我的 NSTableView 拖到 Finder,并在该文件夹中创建文件。但是,我无法解决的一点是,在将原始文件复制到 Finder 之前,我需要修改它的内容。
我添加了以下行,这样我就可以拖到我的 NSTableView 之外:
[self.tableView setDraggingSourceOperationMask:NSDragOperationCopy forLocal:NO];
我可以让它复制实际文件,前提是我将当前文件位置添加到粘贴板,使用:
- (BOOL)tableView:(NSTableView *)aTableView writeRowsWithIndexes:(NSIndexSet *)rowIndexes toPasteboard:(NSPasteboard *)pboard {
[pboard declareTypes:[NSArray arrayWithObject:NSFilenamesPboardType] owner:nil];
NSMutableArray* dragfiles = [[NSMutableArray alloc] init];
NSString* file = [self.files objectAtIndex:row];
NSString* filepath = [[[self.pathControl URL] path] stringByAppendingPathComponent:file];
[dragfiles addObject:filepath];
[pboard setPropertyList:dragfiles forType: NSFilenamesPboardType];
[dragfiles release];
}
但是,因为我想修改文件的内容,所以我不想将文件路径放到粘贴板上。我试过使用 NSFileWrapper,但 Finder 似乎不接受这种有效格式。
我查过谷歌,我发现了一些建议,你可以创建一个临时文件并使用该文件路径。但是,这感觉很难看。
是否可以将数据发送到 Finder?有办法解决吗?
最佳答案
您很可能希望使用 promise 文件,或者 NSFilesPromisePboardType
而不是 NSFilenamesPboardType
。 (注意:文档中提到的 promise 文件方法 dragPromisedFilesOfTypes:fromRect:source:slideBack:event:
和 namesOfPromisedFilesDroppedAtDestination:
是通用的 NSView
方法。NSTableView
定义了您将使用的更方便的方法,而不是通用的方法。也就是说,它仍然应该提供有关 promise 文件拖动如何工作的信息)。 NSTableView
使用 tableView:namesOfPromisedFilesDroppedAtDestination:forDraggedRowsWithIndexes:
,您可以在其中处理文件。在您的 tableView:writeRowsWithIndexes:toPasteboard:
方法中,您将声明 NSFilesPromisePboardType
,然后为您计划写入的文件类型设置一个文件扩展名数组。以下是概述您可能如何处理它的伪代码:
- (BOOL)tableView:(NSTableView *)aTableView
writeRowsWithIndexes:(NSIndexSet *)rowIndexes
toPasteboard:(NSPasteboard *)pboard {
[pboard declareTypes:[NSArray arrayWithObjects:NSFilesPromisePboardType, nil]];
NSMutableArray *filenameExtensions = [NSMutableArray array];
NSArray *draggedFilenames = [self.files objectsAtIndexes:rowIndexes];
for (NSString *filename in draggedFilenames) {
NSString *filenameExtension = [filename pathExtension];
if (filenameExtension.length) {
[filenameExtensions addObject:filenameExtension];
}
}
[pboard setPropertyList:filenameExtensions
forType:NSFilesPromisePboardType];
return YES;
}
然后在您的 names-of-promisedFiles 方法中:
- (NSArray *)tableView:(NSTableView *)aTableView
namesOfPromisedFilesDroppedAtDestination:(NSURL *)dropDestination
forDraggedRowsWithIndexes:(NSIndexSet *)indexSet {
NSArray *draggedFilenames = [self.files objectsAtIndexes:indexSet];
for (NSString *filename in draggedFilenames) {
// do your processing of files in here
// if it may take a long time, you might need to do it on a background
// thread
NSString *fullPathToOriginal = nil;
NSString *destPath =
[[dropDestination path] stringByAppendingPathComponent:filename];
}
return draggedFilenames;
}
您应该能够计算原始文件路径(不确定您是如何确定的,所以我在上面的代码中将其保留为 nil
)和目标文件路径(使用类似上面的代码)。
关于objective-c - 从 NSTableView 拖放到 Finder 时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6674552/
我在这里有一个我想要做的事情的例子:http://jsbin.com/OwoYAlEQ/1/edit 这是我的 HTML: person one person two person three per
我想知道是否有人知道是否有一个预先制定的解决方案:我在 ASP.net 网站上有一个列表,我希望用户能够通过拖放对列表进行重新排序。此外,我希望有第二个列表,用户可以将第一个列表中的项目拖到其中。 到
我想知道是否有人知道是否有一个预先制定的解决方案:我在 ASP.net 网站上有一个列表,我希望用户能够通过拖放对列表进行重新排序。此外,我希望有第二个列表,用户可以将第一个列表中的项目拖到其中。 到
我在我的 Web 应用程序中使用 Ajax ControlToolkit 中的 ModalPopupExtender。我将其 Drag 属性设置为 true,但是当我拖动弹出面板并将其放到新位置时,它
所以,基于this answer ,我有一组可以拖放并卡入到位的 div。唯一的问题是,可拖动的 div 具有不同的高度,我需要它们始终捕捉到目标的底部,而不是顶部。 您可以在this JsFiddl
我一直在使用 Bea 的解决方案 here一段时间后发现它非常有帮助。现在我遇到的问题是,当我将项目拖放到另一个 ListView 控件中或拖放到另一个 ListView 控件中,并且我想在拖动“期间
我试图在使用 QTreeWidget.setItemWidget() 重新父级(拖放)后将小部件放入 QTreeWidgetItem 但是,如果编译以下代码,结果是 QTreeWidgetItem 内
这是场景,我使用的是prototype和scriptaculous,但我相信jquery也会有同样的问题。我在相对定位的 div 中有一个可拖动图像的列表。问题是我无法将图像拖出父 div...好吧.
我正在使用一个普通(Bootstrap)表,我想在其中包含可排序的行。我正在使用 Angular CDK (DragDropModule) 来实现排序/排序。但是,当拖动行时,它会扭曲宽度,因为 cd
我正在尝试在我的 UICollectionView 中实现拖放机制,这与在快捷方式应用程序中重新排序快捷方式的组件非常相似。 截至目前,行为是当您开始拖动时,会留下一个透明的单元格 View ,而另一
我有以下 Jquery UI 拖放 jsfiddle https://jsfiddle.net/zoojsfiddle/ud96jdcp/ 具有
我希望创建一个基于网络的“公告板”,可以这么说,用户可以在其中创建/删除/拖放“图钉”,而不允许重叠“图钉”。 这是一个图表,应该有助于说明我正在尝试创建的内容: 'pins' 可能已创建双击;他们会
我是一名优秀的程序员,十分优秀!