使用 UIPasteboard 管理粘贴板数据

了解如何使用 UIPasteboard 为你的 iOS 添加复制、剪切与粘贴能力,并监听粘贴板数据从而实现高级自定义功能。

使用 UIPasteboard 管理粘贴板数据

UIPasteboardUIKit 中提供的一个组件,用于实现常见的复制、剪切和粘贴操作,开发者也可以用它读取粘贴板数据,并在用户启动应用时执行一些智能化操作。

目前 SwiftUI 中尚未提供类似的组件,因此请在 SwiftUI 开发项目中继续使用 UIPasteboard 。

复制文本到剪贴板

复制文本是 UIPasteboard 最常见的使用场景之一,通常用于处理文本数据的复制、剪切操作。例如,你可能需要让用户在点击按钮时将某段文字复制到剪贴板,以便他们在其他应用中粘贴。

示例代码:复制文本到剪贴板

import SwiftUI

// 你无需显示的导入 UIKit,只需导入 SwiftUI 也可以使用 UIPasteboard
func copyTextToPasteboard(text: String) {
    let pasteboard = UIPasteboard.general
    pasteboard.string = text
    print("Text copied to clipboard: \(text)")
}
  • UIPasteboard.general:这是系统级的通用剪贴板,可以在应用之间共享数据。
  • pasteboard.string:将要复制的文本赋值给 string 属性,将文本存储到剪贴板中。

然后,我们就可以在其他地方粘贴文本,就这么简单。

从剪贴板中读取文本

读取剪贴板中的文本也是常见操作,可以通过 UIPasteboard 轻松获取剪贴板中的内容。例如,当用户打开应用时,可以检查剪贴板中是否有文本,并提供快捷粘贴的功能。

示例代码:从剪贴板中读取文本

import SwiftUI

func readTextFromPasteboard() -> String? {
    let pasteboard = UIPasteboard.general
    if let clipboardText = pasteboard.string {
        print("Text retrieved from clipboard: \(clipboardText)")
        return clipboardText
    }
    return nil
}

复制和读取图像

除了文本,还可以使用 UIPasteboard 复制和粘贴图像数据。例如,在社交媒体应用中,你可以让用户将图片复制到剪贴板并允许他们粘贴到其他应用中

示例代码:复制和读取图像

import SwiftUI

func copyImageToPasteboard(image: UIImage) {
    let pasteboard = UIPasteboard.general
    pasteboard.image = image
    print("Image copied to clipboard")
}

func readImageFromPasteboard() -> UIImage? {
    let pasteboard = UIPasteboard.general
    if let clipboardImage = pasteboard.image {
        print("Image retrieved from clipboard")
        return clipboardImage
    }
    return nil
}

pasteboard.image:用于存储和读取 UIImage 数据。与文本操作类似,图像数据也可以跨应用使用。

复制和读取 URL

在浏览器或社交媒体应用中,复制和分享 URL 是常见的操作场景。UIPasteboard 允许你将 URL 复制到剪贴板,用户可以在其他应用中打开这个链接。

UIpasteboard.general.string 也可以存储 URL 链接,但如果你的应用需要监听复制版的 URL,并提供类似于「Paste and GO」的功能,请将它保存到 .url 中,以便系统作区分。

示例代码:复制和读取 URL

import SwiftUI

func copyURLToPasteboard(url: URL) {
    let pasteboard = UIPasteboard.general
    pasteboard.url = url
    print("URL copied to clipboard: \(url.absoluteString)")
}

func readURLFromPasteboard() -> URL? {
    let pasteboard = UIPasteboard.general
    if let clipboardURL = pasteboard.url {
        print("URL retrieved from clipboard: \(clipboardURL.absoluteString)")
        return clipboardURL
    }
    return nil
}

pasteboard.url:通过剪贴板复制和粘贴 URL,非常适合处理链接分享的场景。

复制和读取颜色

UIPasteboard 还支持复制颜色数据。这个功能在设计类应用或绘图类应用中非常有用,例如在 Procreate 应用中使用取色器复制颜色。

示例代码:复制和读取颜色

import SwiftUI

func copyColorToPasteboard(color: UIColor) {
    let pasteboard = UIPasteboard.general
    pasteboard.color = color
    print("Color copied to clipboard")
}

func readColorFromPasteboard() -> UIColor? {
    let pasteboard = UIPasteboard.general
    if let clipboardColor = pasteboard.color {
        print("Color retrieved from clipboard")
        return clipboardColor
    }
    return nil
}

pasteboard.color:支持复制和粘贴 UIColor 数据,适用于涉及颜色选择和复制的应用场景。

高级功能

上面提到的功能,都是通过 UIPasteboard.general 实现的,general 是 系统级剪贴板,用于在应用之间共享数据(如文本、图像、URL 等)。这是 UIPasteboard 中最常用的接口,适合大多数复制和粘贴操作。

除了我们常用的 general 剪贴板外,UIPasteboard 还提供了许多其他有用的接口和功能。这些接口主要用于检测剪贴板内容的变化,以及处理多种数据类型。

.changedNotification 与 removedNotification

UIPasteboard.changedNotification 是一个 通知,当剪贴板的内容发生变化时,系统会发送这个通知。你可以订阅这个通知来检测剪贴板中的数据何时被更新。

UIPasteboard.removedNotification 是另一个 通知,用于检测剪贴板内容何时被清除或移除。这可以帮助你知道剪贴板中的数据何时被删除。

如果你想创建一个剪贴板管理工具(例如 Paste 或者微信输入法提供的剪切板功能)可以通过监听这个通知,在内容变化时自动记录用户的复制历史。