如何使用Swift将文本复制到剪贴板/粘贴板?

259
我正在寻找一个干净的示例,说明如何将文本复制到iOS剪贴板中,然后可以在其他应用程序中使用/粘贴。这个功能的好处是可以快速复制文本,而不需要传统文本复制的标准文本突出显示功能。我假设关键类在UIPasteboard中,但在他们提供的代码示例中找不到相关区域。

1
Objective-C: http://hayageek.com/uipasteboard-example-read-write-share/Objective-C:http://hayageek.com/uipasteboard-example-read-write-share/ - Iducool
7个回答

629
如果您只需要纯文本,可以使用“string”属性。它既可读又可写:string property
// write to clipboard
UIPasteboard.general.string = "Hello world"

// read from clipboard
let content = UIPasteboard.general.string

当从剪贴板中读取内容时,UIPasteboard文档建议您先检查hasStrings,"以避免在不需要数据或数据可能不存在时使系统不必要地尝试获取数据,例如在使用Handoff时"。


这可能运行良好,但是用户复制的内容中是否包含图像或文件? - victor
1
UIPasteboard.general.string 在 Swift 4.x 中也适用。 - spnkr
我该如何复制字体及其样式? - Krunal Nagvadia
这太棒了。 - hbtpoprock

69

由于复制和粘贴通常是成对进行的,因此这是对@jtbandes简明扼要的答案的补充。我最初来到这里是为了找如何粘贴。

iOS很容易实现这一点,因为可以将通用剪贴板用作变量。只需获取并设置UIPasteboard.general.string即可。

下面是一个示例,展示了如何在UITextField中同时使用复制和粘贴:

复制

UIPasteboard.general.string = myTextField.text

粘贴

if let myString = UIPasteboard.general.string {
    myTextField.insertText(myString)
}

请注意,粘贴板字符串是一个可选类型,因此必须首先解包它。


如何复制带有字体样式的文本,以便我可以使用该字体样式。 - Krunal Nagvadia
@KrunalNagvadia,你不能复制字体样式的文本,但是你可以使用myTextField.font获取字体信息。你可以将这些信息单独保存并在其他地方应用。 - Suragch
好的,如果我从我的应用程序复制文本并粘贴到WhatsApp或其他任何应用程序中,它是否支持样式? - Krunal Nagvadia
@KrunalNagvadia,不,iOS系统的UIPasteboard不支持样式。你只能在自己的应用程序中处理样式。 - Suragch
3
根据苹果文档:不要使用UIPasteboard.general.string来确定剪贴板是否包含字符串数据。相反,请使用hasStrings属性。 - Eric33187

14

在Swift 5中,我可以使用以下代码将文本复制到剪贴板

UIPasteboard.general.string = "要复制的文本"

UIPasteboard.general.string = "Hello world"

然后您可以将文本粘贴到设备的任何位置


谢谢!这个答案和被接受的答案完全不同,真是太疯狂了! - J. Doe

11

从应用程序复制文本到剪贴板:

let pasteboard = UIPasteboard.general
pasteboard.string = employee.phoneNumber

10

SWIFT 4

UIPasteboard.general.string = "TEXT"

6
在你想要复制字符串或文本的地方输入以下代码。
UIPasteboard.general.string = "Dhaval Gevariya" // Put your String here

这是用于从剪贴板中读取字符串的功能。

var readString = UIPasteboard.general.string

1
这个答案与被接受的答案和其他现有答案有何不同? - Saranjith

0
import UIKit.UIPasteboard

extension UIPasteboard {
  static func pasteToClipboard(_ content: String) {
    self.general.string = content
  }

  static func readFromClipboard() -> String? {
    return self.general.string
  }
}

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