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