Wie kann ich einen bestimmten Teil von UILabel
wie einen Blockausdruck aussehen lassen, oder gibt es eine vertikale Linie auf der linken Seite des Textes? Würde TextKit hier reinkommen? Wenn ja, wie?
Mail.app tut dies (siehe die farbigen Teile und die Linie an der Seite von ihnen):
Wie würde ich diesen Effekt replizieren, ohne mehrere UILabel
s zu verwenden (was, wenn ich es dynamisch erzeuge, wäre ziemlich eklig)?
Erstellen Sie eine Ansicht (XIB) mit diesem allgemeinen Layout wie oben abgebildet. Es gibt ein UILabel, ein UITextView und ein UIView (das blaue Rechteck ist ein UIView mit der Hintergrundfarbe). Nennen wir es ThreadView.xib. Haken Sie die Beschriftung, die Textansicht und die Ansicht als Eigenschaften für die Ansicht an.
Wir können dann eine Methode zum Generieren einer dieser Ansichten für uns verwenden und eine Methode, um mehr ThreadViews als Subviews hinzuzufügen, basierend darauf, wie viele Kommentare / Antworten ein Beitrag hat.
%Vor%Jetzt können wir diese Ansichten im Hauptansicht-Controller nur mit diesen beiden Methodenaufrufen erstellen und hinzufügen:
%Vor%Dies wird uns ein Ergebnis wie im Bild unten geben. Dieser Code könnte etwas Refactoring / Restrukturierung verwenden, aber das sollte Ihnen den Anfang machen. Sie können auch die Verwendung von automatischem Layout und / oder das Festlegen der Rahmen der Ansichten verwechseln.
Wenn Sie iOS kleiner als 7 targetieren, können Sie etwas ähnliches tun, indem Sie Core Text verwenden, aber da Core Text eine Art von alten C-undurchsichtigen Typen ist, empfehle ich Ihnen, DTCoreText .
Wenn Sie & gt; = iOS7 verwenden, können Sie NSAtributed string und NSXMLDocument verwenden. Auch wenn die attributierte Zeichenfolge ab 3.x verfügbar ist, wurden sie nur in UIKIT-Objekten in ios6 hinzugefügt und das UIKit-Verhalten bei der Verwaltung in iOS7 radikal geändert.
NSXMLDocument ist hilfreich, weil Sie Ihre Zeichenfolge als HTML darstellen können.
Dies kann leicht mit Text Kit
durchgeführt werden. Ich mache sowas in meiner App. Der Unterschied besteht darin, dass ich Boxen (bei Bedarf verschachtelt) verwende, um jeden Textblock zu markieren. Hier ist, was Sie tun sollten:
Parsen Sie die HTML-Zeichenfolge (oder was auch immer Sie verwenden, um Text zu markieren), markieren Sie jedes Textblock-Anführungszeichen mit einem benutzerdefinierten Attribut wie MyTextBlockAttribute
, speichern Sie die Bereiche jedes Textblocks (z. B. Anführungszeichen) und fügen Sie es als a hinzu Attribut dem verwandten Bereich der attributierten Zeichenfolge (konstruiere diese attributierte Zeichenfolge aus deinem Inhalt) und der Liste, die an den Inhalt angehängt ist. Rufen wir diese Liste MyTextBlockList
auf.
Zeichne Text mit Text Kit
selbst. Zeichne zuerst den Hintergrund (weiße Farbe, hellgraue Farbe usw.), zeichne Text oder vertikale Linien als nächstes. Da Sie den Bereich jedes Textblocks durch Schleifen durch die Liste erhalten können, können Sie diese Blöcke mit der Methode [NSLayoutManager range: inTextContainer:textContainer]
begrenzen.
Hier ist der Code, den ich in meiner App verwendet habe:
%Vor%In Ihrem Fall zeichnen Sie keine Boxen, stattdessen zeichnen Sie linke Rahmen. Die Technik ist die gleiche, hoffe das kann dir helfen!
Tags und Links objective-c ios cocoa-touch uilabel textkit