Wie kann ich NSTextAttachment unterteilen?

Hier ist mein Problem:

Ich verwende Core Data, um Rich-Text-Eingaben von iOS- und / oder OS X-Apps zu speichern, und möchte, dass Bilder in NSTextView oder UITextView eingefügt werden, um: a) ihre ursprüngliche Auflösung beizubehalten und b) auf dem Display so zu skalieren, dass sie richtig zur TextView passen, Dies bedeutet eine Skalierung basierend auf der Größe der Ansicht auf dem Gerät.

Zur Zeit benutze ich- (void)textStorage:(NSTextStorage *)textStorage didProcessEditing:(NSTextStorageEditActions)editedMask range:(NSRange)editedRange changeInLength:(NSInteger)delta um nach Anhängen zu suchen und dann ein Bild mit einem Skalierungsfaktor zu generieren und es dem Attribut textAttachment.image zuzuweisen.

Diese Art von Funktion funktioniert, weil ich nur den Skalierungsfaktor ändere und das Originalbild beibehalten wird. Ich glaube jedoch, dass eine elegantere Lösung darin besteht, eine Unterklasse von NSTextAttachmentContainer zu verwenden und daraus ein CGREct mit entsprechender Größe zurückzugeben

- (CGRect)attachmentBoundsForTextContainer:(NSTextContainer *)textContainer proposedLineFragment:(CGRect)lineFrag glyphPosition:(CGPoint)position characterIndex:(NSUInteger)charIndex

Meine Frage ist also, wie ich eine solche Unterklasse erstelle und einfüge.

Benutze ich textStorage: didProcessEditing, um über jeden Anhang zu iterieren und dessen NSTextAttachmentContainer durch eine eigene Klasse zu ersetzen, oder kann ich einfach eine Kategorie erstellen und diese Kategorie dann irgendwie verwenden, um das Standardverhalten zu ändern. Letzteres scheint viel weniger aufdringlich zu sein, aber wie bringe ich meine textViews dazu, diese Kategorie automatisch zu verwenden?

Hoppla: Gerade bemerkt, dass NSTextAttachmentContainer ein Protokoll ist. Daher gehe ich davon aus, dass das Erstellen einer Kategorie in NSTextAttachment und das Überschreiben der obigen Methode eine Option ist.

Mmm: kann Category nicht verwenden, um eine vorhandene Klassenmethode zu überschreiben. In diesem Fall ist vermutlich die Unterklasse die einzige Option, mit der ich UITextView dazu bringen kann, meine Anhang-Unterklasse zu verwenden, oder muss ich den attributedString durchlaufen, um alle NSTextAttachments durch zu ersetzen Instanzen von MYTextAttachment. Und wie wirkt es sich aus, wenn Sie diese Zeichenfolge unter OS X in das Standard-OS X-NSTextAttachment (das sich von der iOS-Klasse unterscheidet) aufheben?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage