SwiftUI 教程

SwiftUI 主页 SwiftUI 概览 SwiftUI 与 UIkit

SwiftUI 环境

SwiftUI 安装和环境配置 SwiftUI 基本组件 SwiftUI 构建第一个应用程序

SwiftUI 视图

SwiftUI 视图 SwiftUI 自定义文本视图 SwiftUI 自定义图像视图 SwiftUI 堆栈

SwiftUI 绘制形状

SwiftUI 形状 SwiftUI 绘制线条 SwiftUI 绘制矩形 SwiftUI 绘制圆角矩形 SwiftUI 绘制三角形 SwiftUI 绘制圆形 SwiftUI 绘制星形 SwiftUI 绘制多边形 SwiftUI 绘制饼图 SwiftUI 使用内置形状

SwiftUI 文本

SwiftUI 文本视图 SwiftUI 文本输入和输出

SwiftUI 颜色

SwiftUI 颜色 SwiftUI 颜色选择器 SwiftUI 渐变 SwiftUI 调整颜色

SwiftUI 效果

SwiftUI 效果 SwiftUI 混合效果 SwiftUI BLur 效果 SwiftUI 阴影效果 SwiftUI 悬停效果

SwiftUI 动画

SwiftUI 动画 SwiftUI 创建动画 SwiftUI 创建显式动画 SwiftUI 多个动画 SwiftUI 过渡 SwiftUI 不对称过渡 SwiftUI 自定义过渡

SwiftUI 图像

SwiftUI 图像 SwiftUI 图像作为背景 SwiftUI 旋转图像 SwiftUI 媒体

SwiftUI 视图布局

SwiftUI 视图布局 SwiftUI 视图大小 SwiftUI 视图间距 SwiftUI 视图填充

SwiftUI UI 控件

SwiftUI UI 控件 SwiftUI 按钮 SwiftUI 复选框 SwiftUI 菜单栏 SwiftUI 工具栏 SwiftUI 搜索栏 SwiftUI 文本字段 SwiftUI 滑块 SwiftUI 切换 SwiftUI 选择器 SwiftUI 菜单

SwiftUI 列表 &表格

SwiftUI 列表 SwiftUI 静态列表 SwiftUI 动态列表 SwiftUI 自定义列表 SwiftUI 表格

SwiftUI 表单

SwiftUI 表单 SwiftUI 在部分中拆分表单

SwiftUI 事件处理

SwiftUI 事件处理 SwiftUI 手势 SwiftUI 剪贴板 SwiftUI 拖放 SwiftUI 焦点 SwiftUI 警报

SwiftUI 杂项

SwiftUI 容器 SwiftUI 导航 SwiftUI 通知 SwiftUI 跨平台 UI SwiftUI 数据 SwiftUI 可访问性

SwiftUI 框架集成

SwiftUI 框架集成 SwiftUI 与 UIKit 交互 SwiftUI 创建 macOS 应用

SwiftUI 有用资源

SwiftUI 有用资源 SwiftUI 讨论


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