MacOS 10.12 上的 Finder 接受哪些粘贴板类型? 下面的代码让我拖到其他应用程序(如终端和 Sublime),但 Finder 不接受它。是 PasteboardType 的问题,还是我遗漏了什么?
override func viewDidLoad() {
super.viewDidLoad()
mediaInUseTableView.setDraggingSourceOperationMask(NSDragOperation.every, forLocal: false)
}
func tableView(_ tableView: NSTableView, writeRowsWith rowIndexes: IndexSet, to pboard: NSPasteboard) -> Bool {
var urls = [NSURL]()
var types = [NSPasteboard.PasteboardType]()
// types.append(NSPasteboard.PasteboardType(kUTTypeURL as String))
// types.append(NSPasteboard.PasteboardType("NSURLPboardType"))
types.append(NSPasteboard.PasteboardType("NSFilenamesPboardType"))
// types.append(NSPasteboard.PasteboardType.string)
for row in rowIndexes{
urls.append(self.mediaInUses[row].url.absoluteURL as NSURL)
// types.append(NSPasteboard.PasteboardType.fileNameType(forPathExtension: self.mediaInUses[row].url.pathExtension))
}
pboard.declareTypes(types, owner: nil)
pboard.writeObjects(urls)
return true
}
一些更有前途的类型似乎不适合我的环境:
NSFilenamesPboardType
'NSFilenamesPboardType' is unavailable in Swift: use 'PasteboardType.fileURL'
NSPasteboard.PasteboardType.fileURL
'fileURL' is only available on OS X 10.13 or newer
最佳答案
我花了几个小时分析 Finder 自己拖放到我的应用程序中的数据,并尝试了 .declareTypes、.setPropertyList 和 .setData 中对象的无数变体。我让它工作了一次(!),然后在同一代码上再次中断。 无奈之下我也改用了 Swift 3.2。今天,我意识到 .writeObjects 应该根据其输入自动执行上述所有操作,并测试了一个最小的实现,它与其他应用程序一起工作得很好。当这在 Finder 中不起作用时,我确信问题一定出在其他地方。
假设:由于尝试无效,Finder 将我的应用程序列入黑名单。
解决方法:重启电脑,Finder突然接受拖拽了!
我昨天也重启了几次,但那时我的实现可能很糟糕。
最小实现(Swift 3/4):
// Enable drag to other applications:
tableView.setDraggingSourceOperationMask(NSDragOperation.every, forLocal: false)
// Serve data for dragged table rows:
func tableView(_ tableView: NSTableView, writeRowsWith rowIndexes: IndexSet, to pboard: NSPasteboard) -> Bool {
// Prepeare data:
var arrayOfNSURLs = [NSURL]()
for rowIndex in rowIndexes{
arrayOfNSURLs.append(self.mediaFiles[rowIndex].url.absoluteURL as NSURL)
}
// Let API write objects automatically:
pboard.writeObjects(arrayOfNSURLs)
return true
}
这是我的完整实现(Swift 3/4):
override func viewDidLoad() {
super.viewDidLoad()
// Enable global drag (to other applications)
mediaFilesTableView.setDraggingSourceOperationMask(NSDragOperation.every, forLocal: false)
sourceClipsTableView.setDraggingSourceOperationMask(NSDragOperation.every, forLocal: false)
}
func tableView(_ tableView: NSTableView, writeRowsWith rowIndexes: IndexSet, to pboard: NSPasteboard) -> Bool {
if tableView == self.mediaFilesTableView {
var arrayOfNSURLs = [NSURL]()
for row in rowIndexes{
arrayOfNSURLs.append(self.mediaFiles[row].url.absoluteURL as NSURL)
}
pboard.writeObjects(arrayOfNSURLs)
return true
}
if tableView == self.sourceClipsTableView {
var names = [NSString]()
var info = ""
for row in rowIndexes{
info = "\(self.sourceClips[row].mediaFiles.count)"
if info == "0"{
info = "MISSING"
}
names.append(self.sourceClips[row].name.padding(toLength: 30, withPad: " ", startingAt: 0) + info as NSString)
}
pboard.writeObjects(names)
return true
}
return false
}
编辑:切换回 Swift 4,这些行似乎与 Swift 3 中的相同。
关于Swift 4 粘贴板到 Finder,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46956720/
我有一个关联需要一些连接/自定义查询。当试图弄清楚如何实现它时,重复的响应是finder_sql。但是在Rails4.2(及更高版本)中:ArgumentError:Unknownkey::finder_sql我执行连接的查询如下所示:'SELECTDISTINCT"tags".*'\'FROM"tags"'\'JOIN"articles_tags"ON"articles_tags"."tag_id"="tags"."id"'\'JOIN"articles"ON"article_tags"."article_id"="articles"."id"'\'WHEREarticles"."u
我经常发现我希望能够从Rails控制台使用测试fixture查找器(例如users(:david))。有没有我可以在控制台提示符下加载的特定Rails模块,或者我可以安装的gem,使它们可用?我对GoogleOracle的查询没有任何结果,所以我没有屏住呼吸,但我希望SO上有人知道一个secret并愿意分享。 最佳答案 我自己想出来了。这适用于IRB和Pry.只需将以下行添加到我的.irbrc(和/或.pryrc)文件即可。require'active_record/fixtures'defmethod_missing(method
以下效果很好:find"img[src='https://www.example.com/image']"但是我也想找find"img[src='https://www.example.com/image?foo=bar']"如何在查找器的属性中使用正则表达式? 最佳答案 您可以使用^=检查属性是否以特定值开头:find("img[src^='https://www.example.com/image']")文章,TheSkinnyonCSSAttributeSelectors,描述了各种检查(等于、开始于、结束于等):#Equal
我已经确定了我想要的东西,但我似乎无法以Rails设计师正在寻找的方式获得它。基本上,我有(请搁置多元化/等问题):人类关系(parent、后代)我正在尝试获取单亲的所有后代,以及许多后代的单亲(假设每个后代只有一个parent)。我可以在模型中通过以下方式做到这一点:has_one:parent,:through=>:relationships,:foreign_key=>:human_id,:source=>:source_humanhas_many:offsprings,:finder_sql=>'SELECTDISTINCToffsprings.*'+'FROMhumansof
我正在尝试将我创建的全局变量中包含的数组传递到我mac上的剪贴板中。它很长,所以我不想在我的控制台上突出显示、复制和粘贴。我想使用嵌入式unix代码,特别是mac笔记本电脑控制台的pbcopy函数,它允许我将文本传递到我的计算机剪贴板,准备粘贴。如果我通过文件保存来做到这一点,我会做这样的事情(在ruby中):stringdata=>File.open("temp.txt"){|f|f.write(stringdata)}`cattemp.txt|pbcopy`但我是否可以在不创建临时文件的情况下执行此操作?我相信这是可能的。文本中的所有内容都是可能的。提前感谢您的解决方案
我正在尝试编写一个JavaScript脚本来添加到greasemonkey中,在元素之后添加一个按钮。此按钮的onClick应将父元素文本复制到键盘。我见过很多将已选择的文本复制到剪贴板的示例,例如:找到here.我还发现您可以在输入元素中选择文本。我已经尝试将这两种技术以及许多其他技术结合起来,但还没有可行的解决方案。我什至不确定为什么上面的代码会复制到剪贴板。有人对此有解决方案吗? 最佳答案 如果您花时间阅读全文,作者声明这不适用于Firefox...实际上,我认为它甚至不适用于IE,因为它与剪贴板无关!有一种使用Flash的技
我搜索了很多但没有找到从剪贴板获取base64编码的数据。我可以捕获粘贴事件,然后用这个将事件分配给变量clipBoard=e.clipboardData?e.clipboardData:window.clipboardData;Chrome;我可以得到已经粘贴的打印屏幕,就像这样if(clipBoard.types[0]=="Files"){varblob=clipBoard.items[0].getAsFile();varreader=newFileReader();reader.onload=function(event){console.log(event.target.res
当我复制网页中的一些内容时,究竟会发生什么?我的剪贴板缓冲区中会保存什么?我曾经以为它是植物文字,然而,我可以将它的样式或图像粘贴到M$Word或一些Web所见即所得的编辑器中,例如TinyMCE。而且它不是html代码,否则我会在gedit或Notepad中看到标签。我的主要问题是:讲解剪贴板相关知识的文档在哪里?当我制作网页时,是否可以控制用户使用javascript将哪些内容复制到剪贴板? 最佳答案 在Windows上(我猜是某些或大多数其他操作系统),剪贴板可以保存多种格式的数据。例如,在Word中,当您将文本复制到剪贴板时
我正在测试以下代码,当我复制动画gif并将其粘贴到网页时,我在控制台中看到了image/png-而不是image/gif符合预期。为什么?document.onpaste=function(event){console.log(event.clipboardData.items[1]['type']);//'image/png'};如何匹配gif图片?你可以在这个jsfiddle测试它与this例如gif图片。 最佳答案 CF_GIF剪贴板格式很少使用。大多数应用仅将图像作为CF_BITMAP、CF_ENHMETAFILE或CF_D
我正在编写GoogleChrome扩展程序,我想在内容脚本中复制剪贴板中的一些文本。我尝试选择它,然后选择document.execCommand('copy')-它不起作用。我不想要Flash,因为它不是实现它的简单而优雅的方法。我尝试了后台页面和-它不起作用。在Chrome扩展程序中是否有任何工作、优雅和简单的方法将文本复制到剪贴板?它还可以使用jQuery。问候 最佳答案 这里有一些可以复制/粘贴的工作(Coffeescript)代码:https://github.com/philc/vimium/blob/master/li