2016-09-05 5 views

Antwort

1

Ich fand heraus, Sie können über alle attributedString iterieren und lesen, ob das Objekt eine NSTextAttachmentAttributeName Eigenschaft hat. Wenn nicht, nehme an, dass es sich um eine Zeichenfolge handelt.

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

Dieser arbeitete für mich in Swift 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 
    } 
Verwandte Themen