Objective-C - Ändern Sie alle Attribute in NSAttributedString?
[attributedString enumerateAttributesInRange:range options:NSAttributedStringEnumerationReverse usingBlock:
^(NSDictionary *attributes, NSRange range, BOOL *stop) {
NSMutableDictionary *mutableAttributes = [NSMutableDictionary dictionaryWithDictionary:attributes];
[mutableAttributes setObject:[NSNumber numberWithInt:1] forKey:@"NSUnderline"];
attributes = mutableAttributes;
}];
Ich versuche eine Schleife durch alle zugeschrieben, und fügen Sie NSUnderline zu Ihnen. beim Debuggen, wie es scheint, NSUnderline wird dem Wörterbuch Hinzugefügt, aber wenn ich die Schleife für das zweite mal werden Sie entfernt.
Mache ich etwas falsch bei der Aktualisierung NSDictionaries?
InformationsquelleAutor aryaxt | 2011-07-21
Du musst angemeldet sein, um einen Kommentar abzugeben.
Jonathan ' s Antwort macht einen guten job, die erklären, warum es nicht funktioniert. Damit es funktioniert, müssen Sie auf dem zugewiesenen Zeichenfolge verwenden, die diese neuen Attribute.
Ändern der Attribute zugeschrieben Zeichenfolge erfordert, dass es eine NSMutableAttributedString.
Es ist auch ein einfacher Weg, dies zu tun. NSMutableAttributedString definiert die
addAttribute:value:range:
Methode, die setzt den Wert eines bestimmten Attributs im angegebenen Bereich, ohne andere Attribute. Sie können ersetzen Sie den code mit einem einfachen Aufruf dieser Methode (noch mit einem mutable-string).Würde
addAttribute:value:range:
überschreiben Sie den vorhandenen Wert mit dem gleichen Schlüssel über die gleiche Reichweite? Oder würde es nur nicht fügen Sie das Attribut überhaupt?Die Dokumentation nicht sagen, so ich es getestet und bestätigen, dass es überschreibt den vorhandenen Wert an.
Sehr cool. Vielen Dank für herauszufinden, dass aus für mich! (Hätte ich getestet, mich aber mein MacBookPro ist tot in diesem Augenblick).
InformationsquelleAutor ughoavgfhw
Bist du ändern einer lokalen Kopie des Wörterbuchs; der attributierten string keinen Weg, um die Veränderung zu sehen.
Zeiger in C als Wert übergeben werden (und damit das, was Sie zeigen, ist per Referenz übergeben.) Also, wenn Sie einen neuen Wert zuweisen, um
attributes
der code, dass heißt der block hat keine Ahnung, es verändert dich. Die änderung wirkt sich nicht vermehren, außerhalb des Blocks gültig ist.Wieso der downvote?
InformationsquelleAutor Jonathan Grynspan