UITextView mit NSAttributedString und benutzerdefinierte Attribute funktioniert nicht
Wenn mit einem UITextView ich versuchen, ein benutzerdefiniertes Attribut hinzufügen zu einem zugeschrieben string. Jedoch, alle benutzerdefinierten Schlüssel werden verloren, nachdem die Zuweisung an einen UITextView ist attributedText. Wie diese:
NSMutableAttributedString *lString = [[ NSMutableAttributedString alloc ] initWithString: @"astring"
attributes: @{ @"customkey": @"customvalue" }];
NSLog(@"string: %@", lString); //shows customkey present
textView.attributedText = lString;
NSLog(@"result: %@", self.textView.attributedText); // shows customkey missing
Soll dies funktionieren?
- Was benutzerdefiniertes Attribut(N) verwenden Sie? Ich sehe nicht, wie
UITextView
konnte wissen, wie zu Rendern benutzerdefinierte Attribute. Sie verwenden müssen den dokumentierten Parametern. - Benutzerdefinierte Attribute. Wenn ich mit den dokumentierten Parametern funktioniert es. Es könnte jetzt über Sie wissen, aber Sie behalten anstatt Sie abzulegen, richtig?
- Können Sie erklären, wie Sie erwarten, dass
UITextView
zu wissen, etwas über Ihre benutzerdefinierte Attribute? Was versuchen Sie zu tun? - Ich bin versucht hinzuzufügen "astring" in der UITextField, und halten Informationen über "astring" herum, wie das "customkey" auf "customvalue", selbst wenn der Benutzer fügt Zeichen vor dem "astring", nach dem "astring" oder verpasst "astring" zu "foobar". Alles was ich will ist für UITextView nicht zu vergessen, customkey, wie es wäre, nicht zu vergessen die schriftart festgelegt wurde, wenn ein Benutzer eingetippt hat andere Dinge um ihn herum oder verändert das Wort. Es nicht machen zu müssen, oder irgendetwas anderes tun mit ihm, halten Sie es einfach um.
- Scheint zu funktionieren für mich in iOS 7. @KristofVanLandschoot haben Sie noch dieses Problem?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Basierend auf die Kommentare, die Sie versuchen, zu Missbrauch
NSAttributedString
.NSAttributedString
undUITextView
sind nur entworfen, um den dokumentierten Parametern. Sie können in der Lage sein, um zunächst zu speichern benutzerdefinierter Attribute in der Zeichenfolge, aber sobald die text-Ansicht startet die Verarbeitung der attributierten text und Fragen Sie die text-Ansicht für die aktuelle zurückzuführen text, die text-Ansicht wird schon lange losgeworden alle benutzerdefinierten Attribute.Die bessere Lösung wäre, eine Klasse zu erstellen, erstreckt sich UITextView. Die Unterklasse sollte hinzufügen, eine Eigenschaft, die halten, was benutzerdefinierten Attribute, die Sie wollen. Oder vielleicht Ihre benutzerdefinierte Klasse überschreiben die
attributedText
und 'setAttributedText:` Methoden. Diese würde aufpassen speichern ausschalten und wiederherstellen von benutzerdefinierten Attributen finden sich in der attributierten string.Hinweis: diese Antwort gilt für iOS 6 und früher.
Für iOS 7 finden Sie unter @julien_c die Antwort von unten.
NSMutableAttributedString
durch ändern der schriftart und möchten, zeigen Sie es in einemUITextView
, aber es gibt mir eine Warnung aus, daß "Inkompatible Zeiger-Typen zuordnen zu 'NSString *' aus 'NSMutableAttributedString *'." Weißt du, was ich falsch mache, denn soweit ich das sagen kann, bin ich mit einer von Apple ' s offizielle Attribute?Beginnend mit iOS 7, es funktioniert jetzt, wie Sie möchten:
Vom Zugriff Auf Attribute:
Funktioniert es mit standard-und
NSTextStorage
(Text Kit) unterstützt UITextViews.UITextView nicht wirklich anzeigen zugeschrieben strings. Apple hat eine interne Klasse NSHTMLWriter wandelt das set NSAttributedString in HTML-Daten, die dann angezeigt werden, indem der Inhalt UIWebDocumentView (was im wesentlichen Webkit)
Siehe meine Analyse hier: http://www.cocoanetics.com/2012/12/uitextview-caught-with-trousers-down/
UITextView
ist gesichert durch TextKit nicht WebKit-jetzt, nicht wahr?