SwiftUI - 剪贴板
剪贴板是一个小型的临时存储区域,我们可以在复制或剪切后立即将文本、图像、文件等数据存储在其中,并且可以将这些数据粘贴到应用程序的任何位置。它是一个临时区域,因此一次只能保存一个项目或内容,因此每当我们复制或剪切新内容时,它都会用旧内容替换它。
每当系统关闭或重新启动时,它都会删除所有数据。它还允许我们将数据从一个应用程序共享到另一个应用程序,这意味着我们可以从一个应用程序复制或剪切数据并将其粘贴到另一个应用程序中。它还可以存储复杂的数据对象或自定义数据类型。
剪贴板执行两个主要操作,它们是 −
复制数据
粘贴数据
在 SwiftUI 中将数据复制到剪贴板
在 SwiftUI 中,没有可用于复制剪贴板中数据的直接方法或修饰符。因此,我们必须使用 UIKit 的 UIPasteboard 类将数据复制到剪贴板。此类允许我们与系统剪贴板或粘贴板交互,以便轻松地将数据复制并粘贴到其中。它仅适用于 iOS 和 iPad。使用这个类,我们可以复制和粘贴各种类型的数据,如文本、图像、URL 等。
语法
以下是语法 −
// 复制文本
UIPasteboard.general.string = "Hello, world!"
// 复制 URL
UIPasteboard.general.url = URL(string: "https://www.abc.com")
// 复制图像
UIPasteboard.general.image = UIImage(named: "myImage")
// 复制多个数据
UIPasteboard.general.items = [
[UIPasteboard.typeAutomatic: "TutorialsPoint"],
[UIPasteboard.typeAutomatic: UIImage(named: "myImage")!]
]
示例
以下 SwiftUI 程序用于复制剪贴板中的数据。
import SwiftUI
import UIKit
struct ContentView: View {
@State private var myText = "Welcome To TutorialsPoint"
var body: some View {
VStack{
Text(myText)
.font(.title)
.padding()
Button(action: {
//复制文本到剪贴板
UIPasteboard.general.string = myText
}) {
Text("Copy to Clipboard")
.padding()
.background(.pink.opacity(0.8))
.foregroundStyle(.white)
.cornerRadius(10)
}
}
}
}
#Preview {
ContentView()
}
在 SwiftUI 中从剪贴板粘贴数据
我们使用 UIKit 的 UIPasteboard 类从剪贴板读取数据并将其显示在给定的视图上。它可以读取任何类型的数据,例如文本、图像、URL 等。我们还可以借助 hasString、hasURLs、hasImages 和 hasColor 属性检查剪贴板是否包含指定的内容。
语法
以下是语法 −
if let text = UIPasteboard.general.string {
// 处理文本
} else if let image = UIPasteboard.general.image {
// 处理图像
}else if let URLs = UIPasteboard.general.url{
// 处理 URL
}
示例
以下 SwiftUI 程序用于从剪贴板粘贴数据。
import SwiftUI
import UIKit
struct ContentView: View {
@State private var myText = "Welcome To TutorialsPoint"
@State private var isCopy = false
@State private var isPaste = false
var body: some View {
VStack{
Text(myText).font(.title).padding()
Button(action: {
// 复制文本到剪贴板
UIPasteboard.general.string = myText
isCopy = true
// 延迟后重置消息
DispatchQueue.main.asyncAfter(deadline: .now() + 2) {
isCopy = false
}
}) {
Text("Copy Text to Clipboard")
.padding()
.background(Color.pink.opacity(0.8))
.foregroundColor(.white)
.cornerRadius(10)
}
if isCopy {
Text("Copied successfully!")
.bold()
.font(.headline)
.transition(.opacity)
.animation(.easeInOut(duration: 0.3), value: isCopy)
}
Button(action: {
// 从剪贴板粘贴文本
if let clippedText = UIPasteboard.general.string {
myText = clippedText
isPaste = true
// 延迟后重置消息
DispatchQueue.main.asyncAfter(deadline: .now() + 2) {isPaste = false}
} else {
myText = "No text found"
}
}) {
Text("Paste Text from Clipboard")
.padding()
.background(Color.purple.opacity(0.8))
.foregroundColor(.white)
.cornerRadius(10)
}
if isPaste {
Text("Pasted successfully!")
.bold()
.font(.headline)
.transition(.opacity)
.animation(.easeInOut(duration: 0.3), value: isPaste)
}
}.padding()
}
}
#Preview {
ContentView()
}

