z. Wie wir eine NSAttributed Zeichenfolge haben und wir müssen Zeichenfolge und Attribute trennen, dann verwenden Sie diese Attribute für andere Zeichenfolge der gleichen Länge.Wie trennt man Attribute von einem NSAverteilten String und wendet diese Attribute auf einen anderen String an?
Antwort
Ein NSAtributedString kann unterschiedliche Attribute für verschiedene Bereiche der Zeichenfolge aufweisen.
Um diese Attribute zu extrahieren, können Sie die Methode enumerateAttributesInRange
verwenden.
Wir bereiten eine Reihe von Tupeln, die Ergebnisse zu halten:
var extractedAttributes = [(attributes: [String:AnyObject], range: NSRange)]()
Jedes Tupel werden die Attribute für einen bestimmten Bereich in der NSAttributedString halten.
Jetzt iterieren wir auf dem NSAttributedString und das Array mit den Ergebnissen füllen:
attributedString.enumerateAttributesInRange(NSRange(location: 0, length: attributedString.length), options: NSAttributedStringEnumerationOptions(rawValue: 0)) { (dict, range, stopEnumerating) in
extractedAttributes.append((attributes: dict, range: range))
}
Sobald das Array gefüllt ist, können Sie die Inhalte zugreifen:
for item in extractedAttributes {
print(item.attributes)
print(item.range)
}
Und von dort haben Sie alle Sie müssen neue attributierte Strings mit diesen Attributen erstellen: Sie haben den Bereich und die entsprechenden Attribute für jeden im NSAttributedString.
Sie sollten bei dieser Methode von NSAttributedString
attributesAtIndex(location: Int, effectiveRange range: NSRangePointer) -> [String : AnyObject]
Durch den Aufruf dieser Methode bei NSAttributedString einen Blick darauf werfen Sie alle Attribute in Bereich angewendet erhalten. Geben Sie einfach alle Zeichenfolgen als Bereich an. Und dann erstellen Sie eine neue Attribut-Zeichenfolge mit diesen Attributen.
Können Sie bitte ein Beispiel für Ihre erwartete Eingabe und erwartete Ausgabe angeben? –