2016-09-05 3 views

答えて

1

attributedStringをすべて繰り返し、オブジェクトにNSTextAttachmentAttributeNameプロパティがあるかどうかを調べることができました。そうでなければ、文字列であると仮定します。

extension UITextView { 
    func getParts() -> [AnyObject] { 
      var parts = [AnyObject]() 

      let attributedString = self.attributedText 
      let range = NSMakeRange(0, attributedString.length) 
      attributedString.enumerateAttributesInRange(range, options: NSAttributedStringEnumerationOptions(rawValue: 0)) { (object, range, stop) in 

       if object.keys.contains(NSAttachmentAttributeName) { 
        if let attachment = object[NSAttachmentAttributeName] as? NSTextAttachment { 
         if let image = attachment.image { 
          parts.append(image) 
         }else if let image = attachment.imageForBounds(attachment.bounds, textContainer: nil, characterIndex: range.location) { 
          parts.append(image) 
         } 
        } 
       }else { 
        let stringValue : String = attributedString.attributedSubstringFromRange(range).string 
        if !stringValue.isEmptyOrWhitespace() { 
         parts.append(stringValue) 
        } 
       } 
      } 


      return parts 
     } 
} 
0

これはスウィフト4で私のために働い:

extension UITextView { 
    func getParts() -> [AnyObject] { 
     var parts = [AnyObject]() 

     let attributedString = self.attributedText 
     let range = NSMakeRange(0, attributedString.length) 
     attributedString.enumerateAttributes(in: range, options: NSAttributedString.EnumerationOptions(rawValue: 0)) { (object, range, stop) in 
      if object.keys.contains(NSAttributedStringKey.attachment) { 
       if let attachment = object[NSAttributedStringKey.attachment] as? NSTextAttachment { 
        if let image = attachment.image { 
         parts.append(image) 
        } else if let image = attachment.image(forBounds: attachment.bounds, textContainer: nil, characterIndex: range.location) { 
         parts.append(image) 
        } 
       } 
      } else { 
       let stringValue : String = attributedString.attributedSubstring(from: range).string 
       if (!stringValue.trimmingCharacters(in: .whitespaces).isEmpty) { 
        parts.append(stringValue as AnyObject) 
       } 
      } 
     } 
     return parts 
    } 
関連する問題