You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在iOS Swift中构建字体生成器并支持带样式复制到剪贴板

实现带字体样式复制的核心逻辑

你之前使用UIPasteboard.general.string只能写入纯文本,本身不携带任何样式属性,所以粘贴后只会保留文字内容。要实现跨应用带样式粘贴,需要将内容转成通用的富文本格式(RTF)写入剪贴板,具体实现步骤如下:

1. 导入依赖框架

iOS 14及以上推荐用系统新的统一类型识别框架,低于14的版本可以用MobileCoreServices:

import UIKit
import UniformTypeIdentifiers // iOS14+ 用这个
// import MobileCoreServices // iOS14以下用这个

2. 构造带自定义字体的富文本

先把要复制的内容封装成带字体属性的NSAttributedString:

// 你定义的字体列表
let fonts: [String] = ["BodoniSvtyTwoOSITCTT-Book", "ChalkboardSE-Regular"]
// 要复制的文本内容
let targetText = "需要复制的测试文本"
// 选中要使用的字体,做兜底判断避免字体加载失败
guard let selectedFont = UIFont(name: fonts[1], size: 16) else {
    return
}
// 生成带字体样式的富文本
let attributedText = NSAttributedString(
    string: targetText,
    attributes: [.font: selectedFont]
)

3. 转RTF格式写入剪贴板

把富文本转成跨应用通用的RTF数据,写入系统剪贴板:

do {
    // 富文本转RTF数据
    let rtfData = try attributedText.data(
        from: NSRange(location: 0, length: attributedText.length),
        documentAttributes: [.documentType: NSAttributedString.DocumentType.rtf]
    )
    // 将RTF数据写入剪贴板,指定对应类型让其他应用可识别
    UIPasteboard.general.setData(
        rtfData, 
        forPasteboardType: UTType.rtf.identifier // iOS14+写法
        // forPasteboardType: kUTTypeRTF as String // iOS14以下写法
    )
    // 可选:同时写入纯文本,兼容不支持富文本的输入场景
    UIPasteboard.general.string = targetText
} catch {
    print("样式转换失败:\(error)")
}

额外注意事项

  • 你用到的自定义字体需要提前在项目Info.plist的Fonts provided by application项中完成注册,否则UIFont(name:)会返回nil,样式无法生效
  • 如果需要实现文本选中功能,直接使用UITextView即可,把isEditable设为false、isSelectable设为true,系统自带选中复制能力,也可以自定义复制按钮触发上述逻辑
  • 该方案兼容所有支持富文本粘贴的应用,包括备忘录、社交平台发帖框等,如果目标应用只支持纯文本,会自动读取你同时写入的纯文本内容,不会影响使用

内容的提问来源于stack exchange,提问作者21.kaw

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 15:24:06