You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

iOS键盘扩展实现第三方应用文本框Typewriter字体输出方法

iOS键盘扩展实现第三方应用文本框输出Typewriter字体的方案

嘿,先给你理清楚核心问题:iOS的系统规则限制了第三方键盘无法直接修改宿主应用(比如Instagram)文本输入框的字体——输入框的字体样式完全由宿主应用本身控制,键盘只能传递文本内容,没法干涉应用的UI设置。你提到的那款Fonts app只能修改键盘自身的GUI字体,就是因为键盘的界面是它自己的地盘,而第三方应用的输入框不属于键盘的控制范围。

不过,还是有一个可行的思路,前提是宿主应用支持接收富文本输入:

  • 发送带字体属性的富文本(NSAttributedString)
    iOS键盘扩展的UITextDocumentProxy提供了insertAttributedText(_:)方法,允许你插入带有字体、颜色等属性的富文本。如果宿主应用的输入框支持处理富文本(比如Instagram的帖子编辑框),就能保留你指定的Typewriter字体样式。

    具体实现步骤:

    1. 先把Typewriter字体文件嵌入到你的键盘扩展项目中,在Info.plist里添加Fonts provided by application字段,填入字体文件名(比如Typewriter.ttf),确保键盘能加载该字体。
    2. 在键盘输入逻辑中,创建带有字体属性的富文本,再通过富文本插入方法传递给宿主应用:
      // 加载Typewriter字体(替换成你实际的字体名称)
      guard let typewriterFont = UIFont(name: "YourTypewriterFontFamilyName", size: 16) else {
          //  fallback到系统字体
          let plainText = "你要输入的内容"
          textDocumentProxy.insertText(plainText)
          return
      }
      // 创建带字体属性的富文本
      let attributedText = NSAttributedString(
          string: "你要输入的内容",
          attributes: [.font: typewriterFont]
      )
      // 插入富文本到宿主应用输入框
      textDocumentProxy.insertAttributedText(attributedText)
      
  • 注意宿主应用的兼容性
    不是所有应用的输入框都支持富文本:比如很多应用的评论区、短信应用只接受纯文本,这时候富文本的字体属性会被自动剥离,还是会显示应用的默认字体。这一点是你没法控制的,完全取决于宿主应用的实现。

总结一下:这是目前唯一能实现你需求的方式,但只能在支持富文本输入的应用中生效——毕竟iOS系统从设计上就把应用的UI控制权牢牢握在应用自己手里,第三方键盘只能做内容传递的工作。

内容的提问来源于stack exchange,提问作者Steve Jenison

火山引擎 最新活动