这是我的问题:
我使用 Core Data 存储来自 iOS 和/或 OS X 应用程序的富文本输入,并希望粘贴到 NSTextView 或 UITextView 中的图像:a) 保留其原始分辨率,b) 显示以正确缩放以适合 textView,这意味着根据设备上视图的大小进行缩放。
目前我- (void)textStorage:(NSTextStorage *)textStorage didProcessEditing:(NSTextStorageEditActions)editedMask range:(NSRange)editedRange changeInLength:(NSInteger)delta
用于查找附件,然后生成具有比例因子的图像并将其分配给 textAttachment.image 属性。
这种方法之所以有效,是因为我只是更改了比例因子并且保留了原始图像,但我相信更优雅的解决方案是使用 NSTextAttachmentContainer 子类并从中返回适当大小的 CGREct
- (CGRect)attachmentBoundsForTextContainer:(NSTextContainer *)textContainer proposedLineFragment:(CGRect)lineFrag glyphPosition:(CGPoint)position characterIndex:(NSUInteger)charIndex
所以我的问题是如何创建和插入这样的子类?
我是否使用 textStorage:didProcessEditing 来遍历每个附件并用我自己的类替换它的 NSTextAttachmentContainer,或者我可以简单地创建一个类别,然后以某种方式使用这个类别来更改默认行为。后者似乎不那么具有侵入性,但我如何让我的 textViews 自动使用这个类别?
糟糕:刚刚注意到 NSTextAttachmentContainer 是一个协议,所以我假设然后在 NSTextAttachment 上创建一个类别并覆盖上面的方法是一个选项。
嗯:不能使用 Category 来覆盖现有的类方法,所以我猜子类化是唯一的选择,在这种情况下,我如何让 UITextView 使用我的附件子类,或者我是否必须遍历 attributesString 以替换所有 NSTextAttachments MYTextAttachment 的实例。将这个字符串在 OS X 上解压成默认的 OS X NSTextAttachment(不同于 iOS 类)会有什么影响?