Ich habe eine NSAttributedString
mit einer Mischung aus String
und NSTextAttachment
mit Bildern drin. Wie würde ich ein [AnyObject]
Array der Teile extrahieren?NSAttributedString Bilder und Zeichenfolge in Teilen
-2
A
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
- 1. Zeichenfolge teilen und in Int
- 2. NSAttributedString mit und
- 3. NSTextView und NSAttributedString
- 4. Kopieren NSAttributedString in UIPasteBoard
- 5. Verschwommenes Bild (NSTextAttachment) auf NSAttributedString
- 6. Eine Zeichenfolge in SparkSQL teilen
- 7. Convert NSData wieder in NSAttributedString
- 8. Zeichenfolge in Array teilen Shellscript
- 9. Teilen einer Zeichenfolge in PowerShell
- 10. Teilen einer Zeichenfolge in Stücke.
- 11. Geteilte Bilder mit FileProvider teilen
- 12. Swift NSAttributedString Trim
- 13. UITextView, NSAttributedString und benutzerdefinierte Attribute
- 14. Unterstrichen deckt Text in NSAttributedString
- 15. Mehrere Bilder mit UIActivityViewController teilen
- 16. Eine Zeichenfolge teilen
- 17. Autorisieren Bild in NSAttributedString mit UITextView
- 18. Teilen Zeichenfolge Assoc Array
- 19. NSAttributedString in Realm speichern
- 20. NSAttributedString '\ n' ignoriert
- 21. Teilen der Zeichenfolge in Teilzeichenfolge in iOS
- 22. Hinzufügen von Bildern als Textanhang in Swift mit nsattributedstring
- 23. Speichern von benutzerdefinierten Attributen in NSAttributedString
- 24. Teilen einer Zeichenfolge und ignorieren das Trennzeichen in Anführungszeichen
- 25. Teilen und Rekombinieren einer großen Zeichenfolge in Cookies mit ASP.NET
- 26. So teilen Sie eine Zeichenfolge mit Leerraum und "|" in Javascript
- 27. Teilen, ersetzen und verketten eine Zeichenfolge in XSLT 2.0
- 28. Wie Standardschriftart für NSAttributedString
- 29. Teilen einer Zeichenfolge mit Perl
- 30. wie HTML-String von NSAttributedString in iOS