如何使用 NSAttributedString 在 Swift 中添加图像作为文本附件?

2024-01-01

我正在尝试使用我作为按钮放入的图像为 iOS 构建一个自定义键盘。当我按下按钮时,链接到该按钮的图像将被放入属性字符串中,该字符串将加载到自定义键盘视图内的 UiTextView 中。那是有效的。

问题是,当我将新图像附加到属性字符串时,字符串中的旧图像和新图像都会更改为我当前按下的图像。我不明白为什么字符串中的旧图像正在改变。

有什么建议么?我尝试过使用replaceCharactersInRange and insertAttributedString但无法让它发挥作用。这是代码(在 viewDidLoad 之后):

let textAttachment = NSTextAttachment()

let textView = UITextView(frame: CGRectMake(5, 5, 200, 40))
var attributedString = NSMutableAttributedString(string: "")
    
@IBAction func buttonPressed(button :UIButton) {
          
    let string = button.titleLabel?.text
    
    textAttachment.image = UIImage(named: "\(string!).png")!
    textAttachment.image = UIImage(CGImage: textAttachment.image!.CGImage!, scale: 6, orientation: .Up)
    let attrStringWithImage = NSAttributedString(attachment: textAttachment)
    attributedString.appendAttributedString(attrStringWithImage);
    
    textView.attributedText = attributedString;
}

我们不能简单地追加 NSTextAttachment 图片.我们必须存储 所有附加图像和连接到现有属性 细绳。

func buttonPressed(_ sender: Any) {

    let  button = sender as! UIButton
    let tag =  button.tag
    let attributedString:NSAttributedString!

    switch tag {
    case 2:
        attributedString = addAttributedText(text: (button.titleLabel?.text)!)
    case 3:
        attributedString = addAttributedText(text: (button.titleLabel?.text)!)
    case 4:
        attributedString = addAttributedText(text: (button.titleLabel?.text)!)
    default:
       attributedString = addAttributedText(text: "launch")
      }
        textView.attributedText = attributedString
    }

    func addAttributedText(text:String) -> NSAttributedString {
        textViewDidChange(textView)
        let axtractedImageAttribute = NSMutableAttributedString()
        for image in imageArray {
            let attachment:NSTextAttachment = NSTextAttachment()
            attachment.image = image
            attachment.setImageHeight(height: 20)
            let attachmentString:NSAttributedString = NSAttributedString(attachment: attachment)
            axtractedImageAttribute.append(attachmentString)
        }

        let attachment:NSTextAttachment = NSTextAttachment()
        attachment.image = UIImage(named: "\(text).png")
        attachment.setImageHeight(height: 20)
        let attachmentString:NSAttributedString = NSAttributedString(attachment: attachment)
        let attributedString:NSMutableAttributedString = NSMutableAttributedString(string:textView.text!)
        attributedString.append(axtractedImageAttribute)
        attributedString.append(attachmentString)
        return attributedString
    }

    //MARKS:-  Extract attachedImage
    func textViewDidChange(_ textView: UITextView)  {
        imageArray = [UIImage]()
        let range = NSRange(location: 0, length: textView.attributedText.length)
        if (textView.textStorage.containsAttachments(in: range)) {
            let attrString = textView.attributedText
            var location = 0
            while location < range.length {
                var r = NSRange()
                let attrDictionary = attrString?.attributes(at: location, effectiveRange: &r)
                if attrDictionary != nil {
                    let attachment = attrDictionary![NSAttachmentAttributeName] as? NSTextAttachment
                    if attachment != nil {
                        if attachment!.image != nil {
                            imageArray.append( attachment!.image!)
                        }
                    }
                    location += r.length
                }
            }
        }
    }

}

演示参考 https://github.com/shrawan2015/Application-Demo-StackOverFlow/tree/master/AddImageToAttributedString

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 NSAttributedString 在 Swift 中添加图像作为文本附件? 的相关文章

  • 在另一种语言中使用 dateFormatter [重复]

    这个问题在这里已经有答案了 我正在运行一段返回的代码nil在具有不同语言设置的 iPhone 上运行时 代码示例如下所示 let dateFormatter DateFormatter dateFormatter dateFormat MM
  • Objective Flickr 照片上传错误

    我正在使用 ObjectiveFlickr 库将照片从我的 iPhone 应用程序上传到 Flickr 我可以授权该应用程序并执行一般请求 但在尝试上传照片时遇到错误 要上传的照片是使用 AVFoundation 捕获的图像 这是相关代码
  • 在后台任务中安排通知

    我正在为 iOS 开发一个日历 闹钟应用程序 它与网络服务器同步 当在服务器上添加活动时 会发出推送通知 以便 iOS 客户端可以获取新数据 并根据需要更新和安排下一次警报的时间 本地通知 但这仅在应用程序在客户端打开时才有效 我希望客户端
  • Swift 3.0 Pin 颜色注释在 MapView 中没有改变

    我有兴趣根据案例场景更改注释的图钉颜色 在一个函数中 我发送了一个数组 用于确定引脚注释的颜色 到目前为止 我已经设置了一个名为 ColorPointAnnotation 的子类 它将确定 pinColor 然后 在 switch 语句中
  • 沿着预定路径移动图像?

    是否可以通过按下 iphone SDK 中的按钮来将图像设置为沿着预定路径运动 我不是在寻找任何奇特的东西 我正在研究一个简单的概念 但这会节省大量动画工作 是的 您可以通过创建一个路径来为任何 CALayer 制作动画CAKeyframe
  • UISearchController 保留问题

    我正在尝试使用 UISearchController 但是我遇到了无法解决的保留问题 MainTableview 有两个部分 第1节 基于某些正则表达式过滤数据 第2节 All Data 我将 UISearchController 添加到我
  • 使用 UIImageJPEGRepresentation 时,compressionQuality 应该是多少?

    我想对用户库中的照片应用滤镜 然后将其写回磁盘 我在用着UIImageJPEGRepresentation 该函数需要一个UIImage and a compressionQuality值介于 0 0 和 1 0 之间 因为我想保留原始质量
  • 重置转换后的 UIView 的原点会变得疯狂

    我使用 UIView transform 旋转 缩放 UIVIew 效果很好 然而 一旦我更改视图的框架原点 即使我没有执行任何进一步的 CGAffineTransforms 视图的内容也会开始 奇怪 地缩放 为什么会出现这种情况 我该如何
  • 将数字分解为单个数字的数组

    如果我有整数 123 并且我想将数字分解为数组 1 2 3 最好的方法是什么 我已经搞乱了很多 并且我有以下工作 var number 123 var digits Array String number map Int strtoul S
  • 检查 touchend 是否在拖动后出现

    我有一些代码可以更改表的类 在手机上 有时表格对于屏幕来说太宽 用户将拖动 滚动来查看内容 但是 当他们触摸并拖动表格时 每次拖动都会触发 touchend 如何测试触摸端是否是触摸拖动的结果 我尝试跟踪dragstart和dragend
  • iOS WKWebView.scrollView委托导致BAD_ACCESS

    我的 viewController 有一个 UIView 属性 其中包含一个 WKWebView 我将 WKWebView rollView 委托设置为我的 viewController 它是我的 UIView 子类的公共函数 并在我的 v
  • xcode 6.1 (Swift) 中的 SIGABRT 运行时错误

    与最初的代码相比 唯一的更改是在ViewControl swift override func viewDidLoad newMessage hidden true super viewDidLoad Do any additional s
  • 应用程序未通过协同设计验证?

    我在提交 iPhone 申请时遇到问题 我看到了一些类似的问题 但没有找到答案 当我存档项目并单击 验证 时 收到错误消息 应用程序未通过协同设计验证 签名无效 或者未使用 Apple 提交证书进行签名 我假设我在协同设计部分做错了什么 我
  • NSPredicate 的 onFormat 字符串

    我想用 id 键对数据进行排序 我如何理解格式字符串的用途NSPredicate格式 我有一个100号的帖子 我的代码 let objectIDs posts map 0 id let predicate NSPredicate forma
  • 退出导航控制器

    我试图离开初始视图控制器 并进入空白视图控制器 这很好 但是这会使空白视图控制器也成为导航控制器的一部分 这不是我想要的 我想脱离视图控制器 在视图控制器中 我尝试退出 它会自行弹出 当我尝试视图中的方法时 将出现目标视图控制器 self
  • 为什么这个 SKPhysicsJointPin 不能将这 2 个精灵保持在一起?

    我显然不太了解 SKPhysicsJoint 但是除了 Apple 文档之外 网上的信息还很少 下面的代码有什么问题 我认为应该保持头部和颈部永久连接 我的意图是它们就像两张带有大头针的纸 这样它们可以旋转一点 但不仅仅是完全分开 当我运行
  • ActionScript、NetStream.Play.Failed iOS AIR 移动设备

    我正在尝试以类似于 Tiberiu Ionu Stan http stackoverflow com questions 2036107 aac mp4 not working in actionscript 3s netstream 的方
  • ResponseSerializer“无法使用 Swift 3 调用非函数类型“NSHTTPURLResponse”的值?

    我一直在使用以下代码 没有出现任何问题 直到更新到 Xcode 8 beta 6 它类似于这个例子 https github com Alamofire Alamofire generic response object serializa
  • UINavigationController 在 UITabBarController 的 moreNavigationController 中不起作用

    我正在处理UINavigationControllers在我的应用程序中 全部由UITabBarController 一切工作正常 直到我的控制器落入自动生成的 更多 选项卡 我在简单的示例中重现了该问题 难道我做错了什么 我想不通 感谢您
  • KeyboardAvoidingView - 隐藏键盘时重置高度

    我正在使用 React NativeKeyboardAvoidingView设置我的高度View当显示键盘时 但是当我关闭应用程序中的键盘时 视图的高度不会变回原来的值

随机推荐

  • 显示水平图像的列表框 WPF

    我正在尝试在 wpf xaml 中创建一个控件 它将显示图像的水平列表 列表框的宽度是固定的 无滚动条 添加新项目时 现有项目会减少显示的图像数量以容纳它 实际图像不仅仅减少显示的图像数量 该功能类似于向具有相对宽度属性 的网格添加新列 并
  • 如何将数据帧(从hive表获取)写入hadoop SequenceFile和RCFile?

    我可以把它写进 ORC PARQUET 直接和 TEXTFILE AVRO 使用来自 databricks 的附加依赖项
  • 使用 OpenCV 进行 gabor 边缘检测

    在 OpenCV 中 我检索用于图像处理的 Gabor 内核 它是一个 9 9 矩阵 使用 Imgproc getGaborKernel 我有原始图像的灰度矩阵 我什至不确定内核是否应该是图像的大小或只是一小段 我相当确定小内核 如何对两者
  • Telegram 机器人不适用于所有用户

    我创建了几个 Telegram 机器人 它们适用于我的帐户以及我测试过的其他几个帐户 但我收到一些用户的报告称机器人从未做出回应 是否有一些用户设置会阻止帐户从机器人获取消息 或者还有其他想法为什么它不适用于某些帐户 好的 找到问题了 是p
  • 最大 XOR 值比仅使用 XOR 更快

    给定一个数字 N 和一个整数数组 均不小于 2 15 A 是数组大小 100000 从数组中查找 N 和整数的最大异或值 Q 是查询数量 50000 start stop 是数组中的范围 Input A Qa1 a2 a3 N 启动停止 O
  • 确定一个字谜是否是回文的最佳算法是什么?

    在此问题中 我们仅考虑小写英文字母 a z 的字符串 如果从左到右和从右到左遍历时字符串具有完全相同的字符序列 则该字符串是回文 例如 以下字符串是回文 kayak codilitytilidoc 从不奥多甚至 如果字符串 A 由完全相同的
  • 购物车中仅允许 Woocommerce 中定义的产品类别中的一项商品

    在 Woocommerce 中 我发现了一些代码 限制用户对类别 a 或 b 的每个类别购买一个 因此 目前用户可以从 Cat a 购买 2 件物品 1 从 Cat b 购买 1 件 我想限制用户只能使用类别 a 或 b 中的一种产品 我正
  • Google Play 商店应用程序版本检查不再起作用

    对于强制更新 我曾经调用应用程序 url 并检查 html 标记值
  • 通过 Zend_Registry::get() 进行类型提示 - 如何使 PhpStorm 可以理解声明的导航?

    你可以将任何东西传递给Zend Registry set myWidget someWidget 以便稍后可用 http framework zend com manual 1 12 en zend registry using html
  • ManyToMany 字段引用期间的 Django NameError

    我有一个名为 PlayCat 的表 它基本上存储了所有有趣活动的类别名称 比如迪斯科 台球等 因此 当用户创建一个 Play 竞技场时 我希望这些类别能够被引用 ManyToMany 他 她可以在其中选择它所属的所有类别 Play clas
  • 如何在 Java 中格式化 ISO-8601

    我正在尝试改变标准ISO 8601 https en m wikipedia org wiki ISO 8601 format 2014 09 11T21 28 29 429209Z转换为漂亮的 MMM d yyyy hh mm z 格式
  • 如何在unix脚本中发送带有消息的邮件

    刚接触 Unix 正在学习它的言行 我正在用 ksh 编写一个脚本 并且需要发送带有消息的邮件 目前在我的脚本中使用此命令 mailx s File not found email protected cdn cgi l email pro
  • 如何按条件隐藏表单上的编辑/创建按钮?

    我是一名新的 Odoo 开发人员 当我的表单进入自定义状态时 我需要隐藏编辑按钮 由于安全问题 我需要这个按钮 当我尝试为表单提供属性时 XML 中的这段代码不起作用
  • 使用 Jquery 重新构建 ul 和 li 标签

    我尝试通过仅显示每个 ul 10 li 标签来找到分割 ul 标签的方法 假设我有 li 30 个元素 脚本将被重新构建为 3 个 ul 每个 ul 有 10 里标签 我怎样才能做到这一点 假设原件是 ul li a href span A
  • 使用 BufferedReader/BufferedWriter 删除文件的第 N 行

    所以我有一个像这样结构的文本文件 产品 价格 类别 数量 Apple 1 0 Fruits 120 Cucumber 1 4 Vegetables 110 Pear 1 6 Fruits 120 我需要一个可以删除第 N 个项目的函数 在本
  • 如何防止软键盘显示时调整窗口大小和重新布局

    我在活动中显示编辑对话框 当显示软键盘时 活动的窗口将调整为太小 看起来很糟糕 I don t want the window of the activity be resized and layout I just want the ke
  • 拥有级联=“all-delete-orphan”的集合不再被拥有的实体实例引用

    在我的应用程序中 休眠操作是这样的 应用程序使用请求中的新值更新父实体 并删除所有现有的 之前插入的 子实体并插入新的子记录 我正在使用休眠DELETE ORPHAN为此 如下所示 当我这样做时 我收到以下异常 org hibernate
  • 为 Node“导入”ES6

    我想在 Node js 中使用来自 ES6 的 import 而不是来自 common js 的 require 出于某种原因 我认为导入在 Node js 中默认可以工作 但看起来好像没有 我需要安装一些 npm 软件包才能正常工作吗 N
  • IOS App提交失败

    我已经使用 Xcode 7 创建了我的 ipa 并在 ios 9 上运行 它工作正常 但是当我使用应用程序加载器上传它时 它给了我一个错误 Could not make parent directory for Users Myname i
  • 如何使用 NSAttributedString 在 Swift 中添加图像作为文本附件?

    我正在尝试使用我作为按钮放入的图像为 iOS 构建一个自定义键盘 当我按下按钮时 链接到该按钮的图像将被放入属性字符串中 该字符串将加载到自定义键盘视图内的 UiTextView 中 那是有效的 问题是 当我将新图像附加到属性字符串时 字符