gpt4 book ai didi

cocoa - 哪里获取 NSTextView 拖动图像引用

转载 作者:行者123 更新时间:2023-12-03 17:11:09 25 4
gpt4 key购买 nike

我有一个带有 setImportGraphics(true) 的 NSTextView,我可以将图像拖到那里,它们显示在界面中,但我不知道如何以编程方式获取图像(并存储它)。被拖了。

如果我调用myNSTextView.string,我得到的只是图像周围的文本,但图像似乎不存在。

我是否必须实现一些有关拖放的方法来管理这种情况?

最佳答案

I have no idea how to programmatically get the image (and store it) once it's been dragged.

拖放的图像作为 NSTextAttachment 添加到 NSTextStorage 中。因此,为了访问删除的图像,您应该迭代 textStorage 的内容并检查符合图像文件的附件。

Do I have to implement some methods regarding drag and drop to manage this case

您当然可以通过扩展 NSTextView 并覆盖 - (void)performDragOperation:(id<NSDraggingOperation>)sender 来处理删除的文件。方法,如果你想走这条路,我建议你阅读Drag and Drop Programming Topics来自苹果公司的文档。

由于我不喜欢子类化,因此我对这个问题的回答使用 NSAttributedString 的类别来返回附加图像的 NSArray。可以用下面的代码解决:

#import "NSAttributedString+AttachedImages.h"

@implementation NSAttributedString (AttachedImages)


- (NSArray *)images
{
NSMutableArray *images = [NSMutableArray array];
NSRange effectiveRange = NSMakeRange(0, 0);

NSTextAttachment *attachment;
CFStringRef extension;
CFStringRef fileUTI;

while (NSMaxRange(effectiveRange) < self.length) {
attachment = [self attribute:NSAttachmentAttributeName atIndex:NSMaxRange(effectiveRange) effectiveRange:&effectiveRange];

if (attachment) {
extension = (__bridge CFStringRef) attachment.fileWrapper.preferredFilename.pathExtension;
fileUTI = UTTypeCreatePreferredIdentifierForTag(kUTTagClassFilenameExtension, extension, NULL);
if (UTTypeConformsTo(fileUTI, kUTTypeImage)) {
NSImage *theImage = [[NSImage alloc] initWithData:attachment.fileWrapper.regularFileContents];
[theImage setName:attachment.fileWrapper.preferredFilename];

[images addObject:theImage];
}
}
}

return images.copy;
}

@end

如果你使用GIT,你可以从我的Github repository克隆代码.

希望对你有帮助

关于cocoa - 哪里获取 NSTextView 拖动图像引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27344557/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com