我卡在这里了。我知道如何在iPhone上复制和粘贴,但是如何将textField的内容复制到OSX的全局剪贴板中呢?我一直在搜索网页,但真的没有例子。因此,让我详细解释一下我想要完成的内容。我有一个名为helloField的NSTextField,并且我想通过按下按钮将helloField的内容复制到全局剪贴板中。这可以如何实现,并且我需要特定的库吗?谢谢。
我卡在这里了。我知道如何在iPhone上复制和粘贴,但是如何将textField的内容复制到OSX的全局剪贴板中呢?我一直在搜索网页,但真的没有例子。因此,让我详细解释一下我想要完成的内容。我有一个名为helloField的NSTextField,并且我想通过按下按钮将helloField的内容复制到全局剪贴板中。这可以如何实现,并且我需要特定的库吗?谢谢。
在iOS上
[UIPasteboard generalPasteboard].string = helloField.text;
在OSX操作系统上
[[NSPasteboard generalPasteboard] clearContents];
[[NSPasteboard generalPasteboard] setString:helloField.stringValue forType:NSStringPboardType];
在 macOS 和 Swift 3.x 上
let pasteBoard = NSPasteboard.general()
pasteBoard.clearContents()
pasteBoard.writeObjects([text as NSString])
适用于Swift 5
let pasteboard = NSPasteboard.general
pasteboard.clearContents()
pasteboard.setString("string to copy", forType: .string)
复制字符串到剪贴板的代码:
[[NSPasteboard generalPasteboard] clearContents];
[[NSPasteboard generalPasteboard] setString:copiedString forType:NSPasteboardTypeString];
NSStringPboardType
已经被弃用。在NSPasteboard.h
中有关于pboard
类型的说明:
应该使用UTIs来替换pboard类型。在未来的版本中,pboard类型将被弃用。
同样在头文件中:
APPKIT_EXTERN NSString *const NSPasteboardTypeString NS_AVAILABLE_MAC(10_6); // 替代NSStringPboardType
...
APPKIT_EXTERN NSString *NSStringPboardType; // 使用NSPasteboardTypeString
您可以为您的字符串创建一个支持iOS和macOS的扩展:
extension String {
func copy() {
#if os(macOS)
let pasteboard = NSPasteboard.general
pasteboard.clearContents()
pasteboard.setString(self, forType: .string)
#else
UIPasteboard.general.string = self
#endif
}
}
对于Swift 3的Cocoa macOS:
let pasteBoard = NSPasteboard.general()
pasteBoard.clearContents()
pasteBoard.setString("something", forType: NSPasteboardTypeString)
Clipboard.set("some text")
类:
import AppKit
public class Clipboard {
public static func set(text: String?) {
if let text = text {
let pasteBoard = NSPasteboard.general
pasteBoard.clearContents()
pasteBoard.setString(text, forType: .string)
}
}
@available(macOS 10.13, *)
public static func set(url: URL?) {
guard let url = url else { return }
let pasteBoard = NSPasteboard.general
pasteBoard.clearContents()
pasteBoard.setData(url.dataRepresentation, forType: .URL)
}
@available(macOS 10.13, *)
public static func set(urlContent: URL?) {
guard let url = urlContent,
let nsImage = NSImage(contentsOf: url)
else { return }
let pasteBoard = NSPasteboard.general
pasteBoard.clearContents()
pasteBoard.writeObjects([nsImage])
}
public static func clear() {
NSPasteboard.general.clearContents()
}
}
clearContents
是必需的,否则setString
会失败并返回FALSE
。 - Uwe KeimNSStringPboardType
已被弃用:自macOS 10.14起首次被弃用。请使用NSPasteboardTypeString
替换NSStringPboardType
。 - Kamil