首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将NSAttributedString分割成图像+ NSString

将NSAttributedString分割成图像+ NSString
EN

Stack Overflow用户
提问于 2015-06-18 09:51:42
回答 1查看 1.5K关注 0票数 3

我有一个NSAttributedString,它可以包含3种不同的东西:

  • 只是一张照片。(附件)
  • 只是文字
  • 后面跟着文本的图像(/!\不是相反的,永远不会)。

我试图“扫描”该对象,以了解我是否有图像或文本,以及是否有图像,之后是否有文本。

我不习惯使用枚举和范围参数;这些文档并没有真正帮助我理解如何使其工作。

你是如何做到这一点的?

  • 如果有图像,请提取图像
  • 如果有字符串(单独或在图像之后),则提取字符串。

我现在唯一的代码是来自另一篇文章,如果只有一张图片的话,那是很有帮助的。

代码语言:javascript
运行
复制
 NSAttributedString *currentString = self.inputToolbar.contentView.textView.attributedText;
 __block UIImage *currentImage = nil;    
    [currentString enumerateAttribute:NSAttachmentAttributeName
                                 inRange:NSMakeRange(0, [currentString length])
                                 options:0
                              usingBlock:^(id value, NSRange range, BOOL *stop)
                              {
                                  if ([value isKindOfClass:[NSTextAttachment class]])
                                  {
                                      NSTextAttachment *attachment = (NSTextAttachment *)value;
                                      UIImage *image = nil;
                                      if ([attachment image])
                                          image = [attachment image];
                                      else
                                          image = [attachment imageForBounds:[attachment bounds]
                                                               textContainer:nil
                                                              characterIndex:range.location];

                                      if (image)
                                          currentImage = image;
                                  }
                              }];
EN

回答 1

Stack Overflow用户

发布于 2015-06-18 12:48:24

这样做的目的是保持相同的逻辑,但是使用NSMutableAttributedString而不是NSAttributedString,保留图像的NSRange,并删除它。

代码语言:javascript
运行
复制
NSMutableAttributedString *currentString = [[NSMutableAttributedString alloc] initWithAttributedString:self.inputToolbar.contentView.textView.attributedText];
__block UIImage *currentImage = nil;    
__block NSRange imageRange;
[currentString enumerateAttribute:NSAttachmentAttributeName
                                 inRange:NSMakeRange(0, [currentString length])
                                 options:0
                              usingBlock:^(id value, NSRange range, BOOL *stop)
                              {
                                  if ([value isKindOfClass:[NSTextAttachment class]])
                                  {
                                      NSTextAttachment *attachment = (NSTextAttachment *)value;
                                      UIImage *image = nil;
                                      if ([attachment image])
                                          image = [attachment image];
                                      else
                                          image = [attachment imageForBounds:[attachment bounds]
                                                               textContainer:nil
                                                              characterIndex:range.location];

                                      if (image)
                                      {
                                          currentImage = image;
                                          imageRange = range;
                                      }
                                  }
                              }];

NSString *text = @"";
if (image)
{
    text = [[currentString deleteCharactersInRange:imageRange] string];
}

if ([text length] > 0)
{
    NSLog(@"Found Text: %@", text);
}
else
{
    NSLog(@"Did Found Text");
}


NSLog(image?@"Found Image";@"Did NOT found image");
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30912075

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档