iOS圖文混排與NSString轉換

weixin_33978044發表於2017-03-17

圖文混排是iOS開發中經常遇到的一個場景,網上的教程往往只說明瞭如何將一篇圖文混合的內容展示出來,而忽略了將一篇圖文混合的內容翻譯為約定的資料,從而進行儲存和傳輸使用。

iOS7.0之後可以使用NSTextAttachment與NSAttributedString完成圖文混排的展示

- (NSAttributedString*)attributedStringWithImage:(UIImage*)image
{
  NSTextAttachment*attch = [[NSTextAttachment alloc]init];
  attch.image= image;
  attch.bounds=CGRectMake(0,0,32,32);//設定圖片大小
  return [NSAttributedString attributedStringWithAttachment:attch];
}

完成了圖文混排的展示後,需要將混排的內容轉換成String使用
- (NSString *)stringFromAttributedString:(NSAttributedString *)attr
{
NSMutableAttributedString * resutlAtt = [[NSMutableAttributedString alloc]initWithAttributedString:attr];
// 這個方法是文字結尾開始向前列舉,可以放心使用replace方法而不用擔心替換後range發生變化導致問題
[attr enumerateAttributesInRange:NSMakeRange(0, attr.length) options:NSAttributedStringEnumerationReverse usingBlock:^(NSDictionary *attrs, NSRange range, BOOL *stop) {
NSTextAttachment * textAtt = attrs[@"NSAttachment"]; // 從字典中取得那一個圖片
if (textAtt)
{
UIImage * image = textAtt.image;
[resutlAtt replaceCharactersInRange:range withString:[self stringWithImage:image]];
}
}];
return resutlAtt.string;
}

- (NSString *)stringWithImage:(UIImage *)image
{
  NSString *result = @"";
  /**
   *  將圖片翻譯成你所需要的內容
   **/
  return result;
}

通過列舉NSAttributedString中的內容,並對其中特定的內容進行轉換的方法,不只可以用於對圖片內容的轉換,可以基於這個思路完成一個簡單的文字編輯器。

相關文章