如何将文本框复制到OSX剪贴板?

19

我卡在这里了。我知道如何在iPhone上复制和粘贴,但是如何将textField的内容复制到OSX的全局剪贴板中呢?我一直在搜索网页,但真的没有例子。因此,让我详细解释一下我想要完成的内容。我有一个名为helloField的NSTextField,并且我想通过按下按钮将helloField的内容复制到全局剪贴板中。这可以如何实现,并且我需要特定的库吗?谢谢。

6个回答

58

在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])

3
刚刚在 MonoMac for OS X 上发现,clearContents 是必需的,否则 setString 会失败并返回 FALSE - Uwe Keim
在 Swift 实现中,第一行必须省略括号:let pasteBoard = NSPasteboard.general - Aarhus88
NSStringPboardType已被弃用:自macOS 10.14起首次被弃用。请使用NSPasteboardTypeString替换NSStringPboardType - Kamil

12

适用于Swift 5

let pasteboard = NSPasteboard.general
pasteboard.clearContents()
pasteboard.setString("string to copy", forType: .string)

3

复制字符串到剪贴板的代码:

[[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


2

您可以为您的字符串创建一个支持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
    }
}

1

对于Swift 3的Cocoa macOS:

let pasteBoard = NSPasteboard.general()
pasteBoard.clearContents()
pasteBoard.setString("something", forType: NSPasteboardTypeString)

0
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()
    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接